第三方支付之微信支付

前言

上一篇寫了支付寶支付,這一篇說下微信支付,廢話不多說直接開門見山

接入流程

1.申請開發(fā)者資質(zhì)

地址:https://open.weixin.qq.com/

使用公司管理者/高層帳號登錄微信開放平臺,進入“賬號中心”,進行開發(fā)者資質(zhì)認證,需要填寫公司資料,包括但不限于,公司注冊號,公司營業(yè)執(zhí)照,公司對外辦公電話,公司對公銀行卡信息(卡號,發(fā)卡行)。審核時間為一周左右。

2.申請APP_ID/APP_KEY

每個應(yīng)用/游戲要調(diào)用微信的接口都需要有一個微信標志,這個唯一標志通常成為APP_ID或者APP_KEY,各開放平臺差異不大
進入管理中心,創(chuàng)建移動應(yīng)用,每個開發(fā)者具有10個應(yīng)用的創(chuàng)建機會。
備注:測試支付時,務(wù)必使用申請時填寫的keystore文件簽名,包名也需要核對清楚,必然無法調(diào)起支付,返回-1錯誤碼。

3.申請支付能力

在管理中心,查看需要集成支付能力的app,找到“微信支付”一欄,點擊右側(cè)“申請開通”,填寫一些企業(yè)信息后等待審核,審核時間為一周左右,審核通過后,會得到一個企業(yè)商戶號及密碼,對公銀行卡中將收到幾分錢,進入商戶平臺,輸入收到的金錢金額以驗證。驗證通過后即可開始集成支付調(diào)用。在這之前,調(diào)用支付接口是無法完成支付的。

4.代碼集成微信支付

APP支付時序圖

這一個是微信官網(wǎng)提供的App支付時序圖,商戶系統(tǒng)和微信支付系統(tǒng)主要交互說明:
步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
步驟2:商戶后臺收到用戶支付單,調(diào)用微信支付統(tǒng)一下單接口。參見【統(tǒng)一下單API】。
步驟3:統(tǒng)一下單接口返回正常的prepay_id,再按簽名規(guī)范重新生成簽名后,將數(shù)據(jù)傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay
步驟4:商戶APP調(diào)起微信支付。api參見本章節(jié)【app端開發(fā)步驟說明】
步驟5:商戶后臺接收支付通知。api參見【支付結(jié)果通知API】
步驟6:商戶后臺查詢支付結(jié)果。,api參見【查詢訂單API】

說這么復(fù)雜,其實整個流程,App做的就是從后臺取到的微信支付需要的參數(shù),然后調(diào)起微信,微信返回支付結(jié)果,然后微信服務(wù)器異步回調(diào)給我們自己后臺服務(wù)器。
1:Eclipse添加jar包,Android studio添加依賴庫
2:修改清單文件(添加權(quán)限、注冊activity),其中微信的回調(diào)結(jié)果是通過他們定義好的在wxapi包下的一個叫WXPayEntryActivity返回的,不能改整個名字不然看不到回調(diào)結(jié)果。

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

3:首先根據(jù)后臺返回參數(shù),調(diào)起微信

IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
PayReq req = new PayReq();
mWxApi.registerApp(WX_APPID);

        /**
         * 請求app服務(wù)器得到的回調(diào)結(jié)果
         */
        @Override
        public void onSuccess(JSONObject jsonObject) {
            if (mWxApi != null) {
                PayReq req = new PayReq();

                req.appId = WX_APPID;// 微信開放平臺審核通過的應(yīng)用APPID
                try {
                    req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商戶號
                    req.prepayId = jsonObject.getString("prepayid");// 預(yù)支付訂單號,app服務(wù)器調(diào)用“統(tǒng)一下單”接口獲取
                    req.nonceStr = jsonObject.getString("noncestr");// 隨機字符串,不長于32位,服務(wù)器小哥會給咱生成
                    req.timeStamp = jsonObject.getString("timestamp");// 時間戳
                    req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接寫死,服務(wù)器返回的也是這個固定值
                    req.sign = jsonObject.getString("sign");// 簽名,后臺根據(jù)據(jù):https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指導(dǎo)得到這個
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                mWxApi.sendReq(req);
                Log.d("發(fā)起微信支付申請");
            }
        }

4:查看支付結(jié)果

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
private static final String APP_ID = "your app id";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pay_result);
    api = WXAPIFactory.createWXAPI(this, 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) {
}

/**
 * 得到支付結(jié)果回調(diào)
 */
@Override
public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付結(jié)果碼
}

}

errCode值

最后提醒大家注意坑點:
1:測試微信支付需要給微信開放平臺的簽名改成你的未簽名,因為簽名后的apk你看不到debug日志,但是上線時要改成正式打包的apk簽名。
2:當支付時,微信尚未登錄,得不到任何回調(diào),如果調(diào)起支付時有彈窗進度框,并且你想在得到響應(yīng)碼后讓它消失是行不通的,需要在跳出的onStop中處理進度條,不然未登錄并且用戶取消了支付時進度條無法消失。
3:當支付時,WXPayEntryActivity會以透明的形式啟動,所以你可能需要在支付完成得到支付響應(yīng)碼后手動finish該activity,不然你自己寫的支付頁面的activity需要返回兩次才能退出,因為第一次按下back鍵實際是finish掉WXPayEntryActivity.第二次才是你自己的activity.

這就是微信支付集成的所有流程,最后附一個官方demo

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

最后編輯于
?著作權(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)容

  • 今日推薦 經(jīng)常閱讀博客是個好習(xí)慣推薦鴻洋CSDN的博客 微信支付相關(guān)文章 詳細介紹Android開發(fā)集成微信支付(...
    MrQ_Android閱讀 6,284評論 9 52
  • 自己總結(jié)的微信支付寶支付流程和注意點: 準備工作: 需要公司的營業(yè)執(zhí)照,稅務(wù)信息,等老板的身份證信息等,我記得,用...
    Www劉閱讀 18,682評論 2 50
  • 準備工作: 需要公司的營業(yè)執(zhí)照,稅務(wù)信息,等老板的身份證信息等,我記得,用這些材料,去支付寶注冊一個商家賬戶(審核...
    Hevin_Chen閱讀 6,879評論 0 9
  • 前幾天發(fā)了一篇《記帳+兩表,家底門兒清》的短文,有朋友留言:“你這么記帳,麻不麻煩?多累啊!” 當時所用APP的經(jīng)...
    李慶建閱讀 529評論 0 0
  • 2017年9月7日 星期四 天氣:大霧 潘紫涵媽媽親子日記 今天早晨起床后,從窗外遠遠望去,到處是一片白色...
    潘紫涵媽媽閱讀 252評論 0 1

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