微信支付接入流程
微信支付是需要簽名的,跟支付寶一樣,可以在客戶端簽名,也可以在後臺簽名(當然,為了安全還是推薦在伺服器上做簽名,邏輯也比較好理解)
時序圖:
統一下單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為支付失敗,包括使用者主動取消支付,或者系統返回的錯誤
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為取消支付