Android接入微信支付

  • 集成

1.在項(xiàng)目的 build.gradle中,添加下面的內(nèi)容

dependencies {

    // 添加下面的內(nèi)容
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.4.3'

    // ... 其他依賴項(xiàng)
}

2.包名目錄下創(chuàng)建wxapi文件夾,此包(wxapi)下創(chuàng)建名為WXPayEntryActivity的Activity,并實(shí)現(xiàn)IWXAPIEventHandler接口

public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    private IWXAPI iwxapi;
    private static final String APP_ID = "您應(yīng)用的app_Id";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 由第三方App個(gè)性化展示支付結(jié)果
        setContentView(R.layout.activity_wxpay_entry);

        iwxapi = WXAPIFactory.createWXAPI(this, APP_ID,true);
        iwxapi.registerApp(APP_ID);
        iwxapi.handleIntent(getIntent(), this);
    }

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

    @Override
    public void onReq(BaseReq baseReq) {

    }

    /**
     * TODO 微信支付回調(diào)
     */
    @Override
    public void onResp(BaseResp baseResp) {

        int errCode = baseResp.errCode;

        if (errCode == 0) {
            // 成功

        } else if (errCode == -1) {
            // 失敗

        } else if (errCode == -2) {
            // 取消

        }
    }
}

3.清單文件進(jìn)行注冊(cè)

<activity
  android:name=".wxapi.WXPayEntryActivity"
  android:exported="true"
  android:launchMode="singleTop" />
  • 調(diào)試

流程1:調(diào)用微信支付統(tǒng)一下單接口

1.請(qǐng)求參數(shù)(點(diǎn)擊查看官方文檔)

//  必須參數(shù) 
//  字段名   變量名     示例值                          描述
① 應(yīng)用ID    appid    wxd678efh567hg6787(String)    微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID    
② 商戶號(hào)    mch_id    1230000109(String)    微信支付分配的商戶號(hào)    
③ 隨機(jī)字符串    nonce_str    5K8264ILTKCH16CQ2502SI8ZNMTM67VS(String)    不長(zhǎng)于32位
④ 商品描述    body    天天愛(ài)消除-游戲充值(String)    不長(zhǎng)于128位
⑤ 商戶訂單號(hào)    out_trade_no    20190802000001(String)    只能是數(shù)字、大小寫字母_-|*且在同一個(gè)商戶號(hào)下唯一,不長(zhǎng)于32位
⑥ 總金額    total_fee    1(int)    單位為分
⑦ 終端IP    spbill_create_ip    123.12.12.123(String)    不長(zhǎng)于64位(測(cè)試可以隨便填)
⑧ 通知地址    notify_url    http://www.weixin.qq.com/wxpay/pay.php(String)    異步通知回調(diào)地址,不長(zhǎng)于256位(測(cè)試可以隨便填)
⑨ 交易類型    trade_type    APP(String)    JSAPI/NATIVE/APP/MWEB(4種交易類型)
⑩ 簽名    sign    C380BEC2BFD727A4B6845133519F3AD6(String)    通過(guò)對(duì)以上參與統(tǒng)一下單的參數(shù)拼接后進(jìn)行簽名

2.用微信公眾平臺(tái)支付接口調(diào)試工具對(duì)簽名統(tǒng)一下單參數(shù)進(jìn)行簽名

統(tǒng)一下單參數(shù)進(jìn)行簽名(此為模擬數(shù)據(jù))

獲得簽名后的xml

3.利用postman訪問(wèn)微信統(tǒng)一下單接口

利用工具獲得的xml數(shù)據(jù)作為body請(qǐng)求微信接口

獲得預(yù)支付prepay_id

流程2:二次簽名統(tǒng)一下單數(shù)據(jù)

1.二次簽名的參數(shù)(點(diǎn)擊查看官方文檔)

//  必須參數(shù) 
//  字段名   變量名     示例值                          描述
① 應(yīng)用ID    appid    wxd678efh567hg6787(String)    微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID    
② 商戶號(hào)    partnerid    1230000109(String)    微信支付分配的商戶號(hào)    
③ 隨機(jī)字符串    noncestr    5K8264ILTKCH16CQ2502SI8ZNMTM67VS(String)    調(diào)用微信統(tǒng)一下單接口返回的值
④ 擴(kuò)展字段    package    Sign=WXPay(String)    固定值
⑤ 預(yù)支付交易會(huì)話ID    prepayid    wx02132841123196e97f4f04a41521284300(String)    調(diào)用微信統(tǒng)一下單接口返回的值
⑥ 時(shí)間戳    timestamp    1564644709(String)    單位為秒

2.用微信支付接口簽名校驗(yàn)工具獲取二次簽名

獲取二次簽名

3.App通過(guò)appid、partnerid、noncestr、package、prepayid、timestamp、sign這幾個(gè)參數(shù)調(diào)起微信App

  • 發(fā)起微信支付

public static void wechatPay(Activity activity, String appId, String partnerId, String prepayId, String packageValue,String nonceStr, String timeStamp, String sign, String signType) {

        if (activity == null)
            return;

        // 將該app注冊(cè)到微信
        final IWXAPI wxapi = WXAPIFactory.createWXAPI(activity, appId);

        if (!wxapi.isWXAppInstalled()) {
            Toast.makeText(activity, "您尚未安裝微信客戶端", Toast.LENGTH_SHORT).show();
            return;
        }

        PayReq request = new PayReq();
        request.appId = appId;
        request.partnerId = partnerId;
        request.prepayId = prepayId;
        request.packageValue = packageValue;
        request.nonceStr = nonceStr;
        request.timeStamp = timeStamp;
        request.sign = sign;
        request.signType = signType;

        wxapi.sendReq(request);
}
  • 企業(yè)付款到零錢(提現(xiàn))

  • 注意事項(xiàng)

1 統(tǒng)一下單(sign_type不傳默認(rèn)md5簽名類型)和二次簽名必須使用同一種簽名類型
2 上述流程只是測(cè)試App能否調(diào)起微信支付,實(shí)際開(kāi)發(fā)則是用后臺(tái)接口返回的數(shù)據(jù)操作
3 發(fā)起微信支付最后一個(gè)參數(shù)(request.signType = signType;),需要后臺(tái)返回或約定簽名方式

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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