iOS集成微信支付

使用場景:商戶APP調用微信提供的SDK調用微信支付模塊,商戶APP會跳轉到微信中完成支付,支付完后跳回到商戶APP內,最后展示支付結果。
微信支付的開發文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

一、微信支付的交互圖示

chapter8_3_1.png

商戶系統和微信支付系統主要交互說明:
步驟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。

8-1
8-2
8-3
8-4
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]]){
PayResp
response=(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"];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 剛集成完微信支付,總結總結 1. 準備 微信平臺分為微信公眾平臺和微信開放平臺,公眾平臺是運營微信公眾號的管理系統...
    yaqiong閱讀 20,646評論 13 40
  • 首先需要理清楚流程: 用戶使用APP客戶端,選擇商品下單。 商戶客戶端(就是你做的APP)將用戶的商品數據傳給商戶...
    0fbf551ff6fb閱讀 391評論 0 2
  • iOS集成微信支付-Swift版 微信支付在微信紅包的推動發展勢頭越來越猛,甚至有超過支付寶的趨勢,那么在App集...
    iyakexi閱讀 8,177評論 3 12
  • 微信支付流程 官方說明 環境設置 拖入我附件中的SDK(可以將我附件中的SDK替換為官方的, 只為你放心) 設置U...
    超C閱讀 620評論 0 0
  • 照著官網寫好了 支付直接報敗,挫敗~~~ 先把官方demo下載下來,可以本地倒入sdk,我是適用的pods,因為之...
    LYPC_下里巴人閱讀 420評論 0 1