Android微信支付

前段時(shí)間寫(xiě)過(guò)一篇關(guān)于安卓第三方登錄之微信登錄的文章,后面有朋友留言,希望出一篇關(guān)于微信支付的文章,有朋友發(fā)現(xiàn)微信支付的坑很多,而且微信官方文檔讀完了,也沒(méi)太理解,吐槽微信文檔的朋友不少,于是就有了今天這篇文章。

首先,給出官方文檔的地址(需要的朋友,自行閱讀下載)
1、微信官方的Android集成文檔
2、微信官方APP端開(kāi)發(fā)步驟
3、微信官方資源下載

接入流程

1.申請(qǐng)APP_ID
每個(gè)應(yīng)用/游戲要調(diào)用微信的接口都需要有一個(gè)微信標(biāo)志,這個(gè)唯一標(biāo)志通常成為APP_ID, 進(jìn)入管理中心,創(chuàng)建移動(dòng)應(yīng)用,每個(gè)開(kāi)發(fā)者具有10個(gè)應(yīng)用的創(chuàng)建機(jī)會(huì),好在創(chuàng)建的應(yīng)用可以隨時(shí)刪除。已上線的應(yīng)用就不建議刪除。申請(qǐng)appid需要填寫(xiě)應(yīng)用信息:應(yīng)用名稱,包名,簽名(根據(jù)微信的簽名工具生成的),icon(2828 & 108108),app下載地址等信息,即可分配到一個(gè)appid。
備注:測(cè)試支付時(shí),務(wù)必使用申請(qǐng)時(shí)填寫(xiě)的keystore文件簽名,包名也需要核對(duì)清楚,必然無(wú)法調(diào)起支付,返回-1錯(cuò)誤碼。

2.申請(qǐng)支付能力
在管理中心,查看需要集成支付能力的app,找到“微信支付”一欄,點(diǎn)擊右側(cè)“申請(qǐng)開(kāi)通”,填寫(xiě)一些企業(yè)信息后等待審核,審核時(shí)間為一周左右,審核通過(guò)后,會(huì)得到一個(gè)企業(yè)商戶號(hào)及密碼,對(duì)公銀行卡中將收到幾分錢(qián),進(jìn)入商戶平臺(tái),輸入收到的金錢(qián)金額以驗(yàn)證。驗(yàn)證通過(guò)后即可開(kāi)始集成支付調(diào)用。在這之前,調(diào)用支付接口是無(wú)法完成支付的。

開(kāi)通微信支付.png
資源下載.png

3、添加gradle依賴或者jar包
在build.gradle文件中,添加如下依賴即可:

dependencies {
   compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
//或者
dependencies {
   compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
//其中,前者包含統(tǒng)計(jì)功能

或者:微信支付依賴包 >>> libammsdk.jar,這個(gè)需要下載微信支付的demo,把libs下的這個(gè)jar包拷貝到你的項(xiàng)目即可。

4、創(chuàng)建微信支付回調(diào)的類WXPayEntryActivity
注意:這個(gè)類的包名和目錄結(jié)構(gòu),必須是你的項(xiàng)目的一級(jí)包名 >>wxapi >>WXPayEntryActivity

WXPayEntryActivity.png

這個(gè)頁(yè)面是在你調(diào)起微信支付完成或者取消或者失敗后,再回到你的App時(shí)會(huì)調(diào)用的一個(gè)頁(yè)面。

//微信支付的回調(diào)
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
    
    private static final String TAG = "WXPayEntryActivity";
    
    private IWXAPI api;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pay_result);
        
         //調(diào)用API前,需要先向微信注冊(cè)您的APPID
        api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
        api.handleIntent(getIntent(), this);
    }
}

這個(gè)類中你可以加入支付成功或者失敗后的布局,如果你不需要展示什么布局,而是要跳轉(zhuǎn)頁(yè)面,把setContentView刪除即可

回調(diào)結(jié)果的處理

 @Override
    public void onResp(BaseResp resp) {
        int errCode = resp.errCode;
        Log.i(TAG, "errCode:---->" + errCode);
        String result = "";
        switch (errCode) {
            case 0:
                Log.i(TAG, "onResp:支付成功");
                result = "支付成功";
                tvTitle.setText("支付成功");
                break;
            case -1:
                //可能的原因:簽名錯(cuò)誤、未注冊(cè)APPID、項(xiàng)目設(shè)置APPID不正確、注冊(cè)的APPID與設(shè)置的不匹配、其他異常等。
                Log.i(TAG, "onResp:支付失敗");
                result = "支付失敗,請(qǐng)重試";
                finish();
                break;
            case -2:
                //用戶取消支付
                Log.i(TAG, "onResp:用戶取消支付");
                result = "您取消了支付";
                finish();
                break;
        }
        ToastUtils.showToast(this, result);
    }

當(dāng)然,你也可以參考微信官方APP開(kāi)發(fā)步驟

下面是回調(diào)的結(jié)果碼

微信支付的結(jié)果碼.png

怎么還沒(méi)有講怎么調(diào)起微信客戶端進(jìn)行支付???有讀者不開(kāi)心了,別急,因?yàn)闊o(wú)論是微信支付還是支付寶支付,調(diào)用支付都不是很復(fù)雜的,這就給大家到來(lái)。

5、調(diào)用微信支付

private void wxPay(WxPayBean wxPayBean){       
        //WxPayBean是我自己項(xiàng)目的服務(wù)器返回的微信支付簽名的數(shù)據(jù),這個(gè)需要你和你們公司后臺(tái)對(duì)接
        WxPayBean.ResultBean result = wxPayBean.getResult();
        //調(diào)用API前,需要先向微信注冊(cè)您的APPID
        IWXAPI wxAPI = WXAPIFactory.createWXAPI(this, MainConstant.Cart.APP_ID);
        wxAPI.registerApp(result.getAppid()); // 將該app注冊(cè)到微信
        PayReq req = new PayReq();
        req.appId = result.getAppid(); //微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID
        req.partnerId = result.getPartnerid(); //商戶號(hào)
        req.prepayId = result.getPrepayid(); //微信返回的支付交易會(huì)話ID
        req.packageValue = "Sign=WXPay"; //固定值Sign=WXPay
        req.nonceStr = result.getNoncestr(); //隨機(jī)字符串
        req.timeStamp = result.getTimestamp(); //時(shí)間戳
        req.sign = result.getSign(); //簽名
        //調(diào)起微信支付
        wxAPI.sendReq(req);
}

下面是請(qǐng)求調(diào)用微信支付所需要的參數(shù)列表
注意:這些都是后臺(tái)傳的,尤其這個(gè)簽名字符串,最好是后臺(tái)生成,如果你們服務(wù)器大哥不管,你最好找他喝點(diǎn)小酒,嘮嘮嗑

請(qǐng)求參數(shù)列表.png

下面是APP發(fā)起支付請(qǐng)求的一個(gè)流程

發(fā)起支付請(qǐng)求.png

下面是微信開(kāi)放平臺(tái),你的應(yīng)用簽名,這個(gè)東西,很多人容易弄錯(cuò),這個(gè)一旦錯(cuò)了,就調(diào)不起微信支付的界面了,詳情請(qǐng)移步我的另一篇博客
安卓第三方登錄之微信登錄

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,316評(píng)論 25 708
  • 由于公司運(yùn)營(yíng)需要,Android客戶端要增加微信支付。在看了幾遍官方文檔之后,加上之前有集成微信分享的經(jīng)驗(yàn),所以很...
    Kerry202閱讀 1,499評(píng)論 2 8
  • 現(xiàn)在的支付潮流莫過(guò)于微信跟支付寶了,最近我們項(xiàng)目涉及到會(huì)員需求,就用到微信支付跟支付寶支付,說(shuō)實(shí)話接入之前會(huì)覺(jué)得這...
    Luke_單車(chē)閱讀 16,030評(píng)論 15 52
  • 前段時(shí)間開(kāi)發(fā)一款產(chǎn)品,需要接入支付,老板對(duì)微信支付情有獨(dú)鐘。剛好自己沒(méi)有實(shí)際做過(guò)微信支付這塊,也就可以借這次機(jī)會(huì)實(shí)...
    david_zhw閱讀 1,013評(píng)論 4 12
  • 一只住在荷蘭的青蛙,撐著一把油紙傘,獨(dú)自走在有著一座風(fēng)車(chē)的小路,路邊有一位在哭的小女孩,青蛙上前去問(wèn)問(wèn)小女孩什么哭...
    月半伴月閱讀 435評(píng)論 0 0

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