1. 程式人生 > >微信支付接入流程

微信支付接入流程

微信支付是需要簽名的,跟支付寶一樣,可以在客戶端簽名,也可以在後臺簽名(當然,為了安全還是推薦在伺服器上做簽名,邏輯也比較好理解)

時序圖:

統一下單API、支付結果通知API和查詢訂單API等都涉及簽名過程,呼叫都必須在商戶伺服器端完成。

商戶系統和微信支付系統主要互動說明:

  • 1. 使用者在商戶APP中選擇商品,提交訂單,選擇微信支付。

  • 2. 商戶後臺收到使用者支付單,呼叫微信支付統一下單介面。

  • 3. 統一下單介面返回正常的prepay_id,再按簽名規範重新生成簽名後,將資料傳輸給APP。參與簽名的欄位名為appid,partnerid,prepayid,noncestr,timestamp,package。

  • 4. 商戶APP調起微信支付。

  • 5. 商戶後臺接收支付通知。

  • 6. 商戶後臺查詢支付結果。

商戶在微信開放平臺申請開發應用後,微信開放平臺會生成APP的唯一標識APPID。由於需要保證支付安全,需要在開放平臺繫結商戶應用包名和應用簽名,設定好後才能正常發起支付。設定介面在【開放平臺】中的欄目【管理中心 / 修改應用 / 修改開發資訊】裡面。

應用簽名:根據專案的應用包名和編譯使用的keystore,可由簽名工具生成一個32位的md5串,在除錯的手機上安裝簽名工具後,執行可生成應用簽名串

參照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路徑中實現WXPayEntryActivity類(包名或類名不一致會造成無法回撥),在WXPayEntryActivity類中實現onResp函式,支付完成後,微信APP會返回到商戶APP並回調onResp函式,開發者需要在該函式中接收通知,判斷返回錯誤碼,如果支付成功則去後臺查詢支付結果再展示使用者實際支付結果。注意一定不能以客戶端返回作為使用者支付的結果,應以伺服器端的接收的支付通知或查詢API返回的結果為準。(net.sourceforge.simcpux為你的專案包名)程式碼示例如下:

   @Override
   public void onResp(BaseResp resp)
{
       Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
       // 判斷resultStatus 為“0”則代表支付成功,具體狀態碼代表含義可參考介面文件
       if (resp.errCode.equals("0")) {
           Toast.makeText(ThirdActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
       }else if (resp.errCode.equals

("-1")){
           // -1為支付失敗,包括使用者主動取消支付,或者系統返回的錯誤
           Toast.makeText(ThirdActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
       }else if (resp.errCode.equals("-2")){
           // -2為取消支付,或者系統返回的錯誤
           Toast.makeText(ThirdActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
       }else {
           // 其他為系統返回的錯誤
           Toast.makeText(ThirdActivity.this, "支付錯誤", Toast.LENGTH_SHORT).show();
       }
   }

以下三種為常用結果判斷

0為支付成功
-1為支付失敗
-2為取消支付