微信支付分爲好幾種,這裏記錄的是app微信支付流程。php
適用場景web
用戶使用xxAPP時,須要經過微信支付完成某項報名。此時xxAPP調用微信提供的SDK調用微信支付模塊,接着xxAPP跳轉到微信支付頁面,由客戶完成支付,支付完成後跳回到xxAPP頁面,顯示支付結果。api
APP端開發步驟以下:xcode
1.在xxAPP工程裏設置APPID
服務器
商家在微信開放平臺申請開發app應用後,微信開放平臺會生成該app的惟一標識appId。在xcode中設置sppId步驟微信
xxAPP-->info-->URL Types-->URL Schemes-->輸入商戶本身的appId。
app
2.註冊appId函數
在xxAPP工程中引入微信lib庫和頭文件,調用微信的api以前,須要先向微信註冊商家的appId,代碼以下微信支付
[WXApi registerApp:@"商家appId" withDescription:nil];
3.調用支付
spa
用戶在使用xxApp完成支付功能時,商家服務器會生成支付訂單,先調用微信的【統一下單API】生成預付單,獲取到prepay_id後將參數再次簽名傳輸給app發起支付。調用支付的關鍵代碼以下:
PayReq *request = [[PayReq alloc] init]; request.partnerId = @"商戶號"; request.prepayId= @"預支付交易會話ID"; request.package = @"Sign=WXPay"; request.nonceStr= @"隨機字符串"; request.timeStamp= @"時間戳"; request.sign= @"簽名"; [WXApi sendReq:request];
4.支付結果回調
參照微信SDK Sample,實現onResp方法、完成支付後,微信app會返回到商家app頁面,而且回調onResp函數,開發者須要在該方法中接收通知,判斷返回碼,若是支付成功則去後臺查詢支付結果再展現給用戶實際支付結果。注意:不能以客戶端取到的錢數做爲用戶支付結果,應該以服務器端接收到的支付通知或查詢API返回的結果爲準。代碼示例以下:
-(void)onResp:(BaseResp*)resp { if ([respisKindOfClass:[PayRespclass]]) { PayResp*response=(PayResp*)resp; switch(response.errCode) { case 0: //服務器端查詢支付通知或查詢API返回的結果再提示成功 NSlog(@"支付成功"); break; default: NSlog(@"支付失敗,retcode=%d",resp.errCode); break; } } }
回調中errCode值列表
0 成功
-1 失敗
-2 用戶取消