最新版微信支付和支付寶支付集成(未完待續(xù))

最近公司新項目要集成微信支付,支付寶支付,搜了一下,網(wǎng)上舊版本的集成比較多,所以就按照官方最新文檔進行集成,記錄下集成過程中遇到的問題,方便以后查看。

1.微信支付集成

首先要了解微信 支付的業(yè)務(wù)流程,具體可以看微信支付業(yè)務(wù)流程,后臺剛開始不知道統(tǒng)一下單接口返回的sing要再進行一次簽名后才返回實體bean,我每次都是拿到第一次的簽名sing去調(diào)支付,怎么調(diào)都調(diào)不起來,然后就是報-1的錯誤,排除了appkey錯誤,后來跟后臺對接的時候才知道他把第一次請求下來的支付信息直接返回了。。。

上圖在第5步的時候,后臺請求到預(yù)訂單信息后,按照第6步還要后臺把sing再簽名一次才能正常的調(diào)起支付哦!

后臺2次簽名需要的參數(shù)

統(tǒng)一下單接口返回正常的prepay_id,再按簽名規(guī)范重新生成簽名后,將數(shù)據(jù)傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay

下面是接入微信支付的步奏:

1.用官方的工具做app的簽名(前期用debug版本簽名的話,后期上線打包要更換成正式版本的簽名),發(fā)給臺人員或者項目經(jīng)理去創(chuàng)建app并配置秘鑰私鑰,開通app的支付功能,前端只要一個AppID。

2.下載Demo,獲取SDK、地址:下載微信支付SDK和Demo

3.導(dǎo)入微信支付的jar文件到libs,拷貝WXPayEntryActivity.java文件,這個頁面是在你調(diào)起微信支付完成支付(或取消或失敗)后,再回到你的App時會調(diào)用的一個頁面。頁面的布局可以是你自定義的布局,配置AndroidManifest.xml文件,代碼如下:

(新建一個wxapi包,把這個類復(fù)制到自己的項目中(不要改類名))

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

WXPayEntryActivity這個類中不想要布局的話可以把setContentView(R.layout.pay_result);這句代碼刪除,然后在onResp這個方法中我的更改如下:

4.在要調(diào)起支付的地方先調(diào)用下面代碼將該app注冊到微信。必須先注冊

// IWXAPI 是第三方app和微信通信的openapi接口
   private IWXAPIapi;
   public void regToWx() {
       // 通過WXAPIFactory工廠,獲取IWXAPI的實例
        api= WXAPIFactory.createWXAPI(this,Api.APP_ID, false);
        // 將該app注冊到微信
        api.registerApp(Api.APP_ID);
}

5.點擊支付按鈕時候先調(diào)用后臺提供的生成預(yù)支付信息的接口,拿到調(diào)起微信支付的參數(shù)

6.接收后臺傳回來的實體bean,配置微信調(diào)用信息參數(shù),發(fā)起調(diào)用。

private void showWxPay(AppPayBean appPayBean) {
    PayReq req =newPayReq();
    req.appId= appPayBean.getPay().getAppid();
    req.partnerId= appPayBean.getPay().getMch_id();
    req.prepayId= appPayBean.getPay().getPrepay_id();
    req.nonceStr= appPayBean.getPay().getNonce_str();
    req.timeStamp= appPayBean.getPay().getTime();
    req.packageValue="Sign=WXPay";
    req.sign= appPayBean.getPay().getSign();
    //req.extData = "app data";
   // 在支付之前,如果應(yīng)用沒有注冊到微信,先調(diào)用IWXMsg.registerApp將應(yīng)用注冊到微信      
    api.sendReq(req);
}

7.無論成功失敗都會調(diào)用WXPayEntryActivity這個類的onResp方法,在里面進行邏輯判斷

/**
 * 微信支付結(jié)果
 */
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        api = WXAPIFactory.createWXAPI(this, Api.APP_ID);
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {
        KLog.e(resp.errCode + resp.errStr + "===toString===" + resp.toString());

        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if (resp.errCode == 0) {
                Toast.makeText(getApplicationContext(), "支付成功", Toast.LENGTH_SHORT).show();
                EventBus.getDefault().post(new MessageEvent.PayEvent(0));//發(fā)送通知關(guān)閉確認(rèn)訂單界面
                //跳轉(zhuǎn)到待發(fā)貨界面
                Intent intent = new Intent(WXPayEntryActivity.this, MyOrderActivity.class);
                intent.putExtra("type", 2);
                startActivity(intent);
            } else if (resp.errCode == -1) {
                EventBus.getDefault().post(new MessageEvent.PayEvent(1));
                Toast.makeText(getApplicationContext(), "支付失敗", Toast.LENGTH_SHORT).show();
            } else if (resp.errCode == -2) {
                EventBus.getDefault().post(new MessageEvent.PayEvent(2));
                Toast.makeText(getApplicationContext(), "支付取消", Toast.LENGTH_SHORT).show();
            }
        }
        finish();
    }
}

2.支付寶支付集成

后續(xù)更新

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容