android集成微信支付(全是坑)

android集成微信支付(全是坑)


一.   微信開發步驟:
1.註冊registerApp
2.獲取token 
3.獲取prepayid
4.調用sendReq
java

二.   服務端簽名,安卓客戶端具體操做以下:
1.Constants.java,MD5.java,PayActivity.jav,util.java拷貝到項目下,複製wxapi/WXPayEntryActivity.java到項目下;
2.修改微信開放平臺中後臺的包名和簽名,能夠用騰訊開放平臺的簽名工具獲取簽名Gen_Signature_Android.apk
1AndroidManifest.xmlpackage名字和項目包名同樣;
2AndroidManifest.xml中添加.wxapi.WXPayEntryActivity(不添加,支付成功後沒法跳轉到相應的通知Activity界面);
3.具體調用以下:
        else if(url.endsWith(ProtocolConst.WECHAT_PAY))
        {
            JSONObject json = jo.getJSONObject("data");
            String appid = json.getString("appid");
 
            IWXAPI wxApi = WXAPIFactory.createWXAPI(C1_CheckOutActivity.this, appid, true);
            wxApi.registerApp(appid);
            
            if(!wxApi.isWXAppInstalled())
            {
                ToastView toast = new ToastView(C1_CheckOutActivity.this, "沒有安裝微信");
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
                return;
            }            
            if(!wxApi.isWXAppSupportAPI())
            {
                ToastView toast = new ToastView(C1_CheckOutActivity.this, "當前版本不支持支付功能");
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
                return;
            }            
            PayReq req = new PayReq();           
            req.appId            = json.getString("appid");
            req.partnerId        = json.getString("partnerid");
            req.prepayId        = json.getString("prepayid");
            req.nonceStr        = json.getString("noncestr");
            req.timeStamp        = json.getString("timestamp");
            req.packageValue    = json.getString("package");
            req.sign            = json.getString("sign");
            req.extData            = "app data"; // optional
            wxApi.sendReq(req);
        }
4.接收支付結果的WXPayEntryActivity中的onResp函數裏處理支付結果:
    public void onResp(BaseResp resp) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

        String msg = "";
        
        if(resp.errCode == 0)
        {
            msg = "支付成功";
        }
        else if(resp.errCode == -1)
        {
            msg = "已取消支付";
        }
        else if(resp.errCode == -2)
        {
            msg = "支付失敗";
        }
    
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
             mDialog = new MyDialog(this, "支付結果", msg);
             mDialog.show();

             mDialog.positive.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {                        
                     mDialog.dismiss();
                     finish();
                 }
             });
             
             mDialog.negative.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {                        
                     mDialog.dismiss();
                     finish();
                 }
             });
        }
    }
.微信遇到的具體問題:
1.demo中找不到APP_KEY,郵箱發過來的沒有此參數,對應文檔找到是PaySignKey
2.測試返回的支付結果是-1,可能產生此問題的地方:包名不一致;應用簽名和後臺不一致。
3.若是是客戶端demo測試,記得注意價格單位是分(調用失敗),body是中文的時候須要字符轉換(返回錯誤ERR_JSON)。
客戶端demo測試返回支付結果-1,記得刪除微信緩衝數據(設置-》應用程序管理器->選中微信->清除數據)
能夠用demo裏的debug.keystore來測試,功能修改目錄:preferences->android->build->custom debug keystore->browse。
android

相關文章
相關標籤/搜索