使用場景:商戶APP調用微信提供的SDK調用微信支付模塊,商戶APP會跳轉到微信中完成支付,支付完后跳回到商戶APP內,最后展示支付結果。
微信支付的開發文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
一、微信支付的交互圖示
商戶系統和微信支付系統主要交互說明:
步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
步驟2:商戶后臺收到用戶支付單,調用微信支付統一下單接口。參見【統一下單API】。
步驟3:統一下單接口返回正常的prepay_id,再按簽名規范重新生成簽名后,將數據傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay
步驟4:商戶APP調起微信支付。api參見本章節【app端開發步驟說明】
步驟5:商戶后臺接收支付通知。api參見【支付結果通知API】
步驟6:商戶后臺查詢支付結果。,api參見【查詢訂單API】
二、微信支付的交互流程
步驟1:用戶進入商戶APP,選擇商品下單、確認購買,進入支付環節。商戶服務后臺生成支付訂單,簽名后將數據傳輸到APP端。以微信提供的DEMO為例,見圖8.1。
步驟2:用戶點擊后發起支付操作,進入到微信界面,調起微信支付,出現確認支付界面,見圖8.2。
步驟3:用戶確認收款方和金額,點擊立即支付后出現輸入密碼界面,可選擇零錢或銀行卡支付見圖8.3。
第四步:輸入正確密碼后,支付完成,用戶端微信出現支付詳情頁面。見圖8.4。
第五步:回跳到商戶APP中,商戶APP根據支付結果個性化展示訂單處理結果。見圖8.5。
三、微信支付的簡易Demo
在AppDelegate中進行微信注冊
<pre>
// 向微信注冊
[WXApi registerApp:@"wx99c6d6167669c9d0" withDescription:@"IDPhotoCamera"];
</pre>
<pre>
// 微信支付需要訂單號
-(NSString *)WXPayWithOrderNumber:(NSString *)orderNum WithPayAmount:(float)payAmount
{
NSLog(@"微信支付orderNum,payAmount%@,%0.2f",orderNum,payAmount);
self.orderNum=orderNum;
self.payAmount=payAmount;
// 這里面的參數按要求應該全部從服務器端返回,此處只返回了預支付訂單號和金額,其余在APP中自己設置了!
self.tradeNO = [self generateTradeNO]; //隨機字
_request = [[PayReq alloc] init];
_request.openID = MXWechatAPPID;// 應用的APPID
_request.partnerId = MXWechatMCHID;// 商戶號,收款賬戶號
_request.prepayId= self.orderNum; // 預支付訂單號
_request.package = @"Sign=WXPay";
_request.nonceStr= self.tradeNO;
// 簽名加密
MXWechatSignAdaptor *md5 = [[MXWechatSignAdaptor alloc] init];
_request.sign=[md5 createMD5SingForPay:MXWechatAPPID
partnerid:MXWechatMCHID
prepayid:self.orderNum
package:@"Sign=WXPay"
noncestr:self.tradeNO
timestamp:_timeStamp];
// 調用微信支付
[WXApi sendReq:_request];
return @"this is ios WXPay";
}
</pre>
AppDelegate.m中實現onResp函數,支付完成后,微信APP會返回到商戶APP并回調onResp函數
<pre>
-(void)onResp:(BaseResp)resp{
if ([resp isKindOfClass:[PayResp class]]){
PayRespresponse=(PayResp*)resp;
switch(response.errCode){
case WXSuccess:
//服務器端查詢支付通知或查詢API返回的結果再提示成功
JULog(@"支付成功服務器端查詢支付通知或查詢API返回的結果再提示成功");
[[NSNotificationCenter defaultCenter] postNotificationName:JUPayOrderSucceedNotification object:nil];
break;
default:
JULog(@"支付失敗,retcode=%d",resp.errCode);
break;
}
}
}
</pre>
四、項目設置注意事項
1、項目設置APPID(和支付寶一樣)
商戶在微信開放平臺申請開發APP應用后,微信開放平臺會生成APP的唯一標識APPID。在Xcode中打開項目,設置項目屬性中的URL Schemes為您的APPID。
2、注冊APPID
商戶APP工程中引入微信lib庫和頭文件,調用API前,需要先向微信注冊您的APPID,代碼如下:
[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];