微信支付分為好幾種,這里記錄的是app微信支付流程。
適用場景
用戶使用xxAPP時,需要通過微信支付完成某項報名。此時xxAPP調用微信提供的SDK調用微信支付模塊,接著xxAPP跳轉到微信支付頁面,由客戶完成支付,支付完成后跳回到xxAPP頁面,顯示支付結果。
APP端開發步驟如下:
1.在xxAPP工程里設置APPID
商家在微信開放平臺申請開發app應用后,微信開放平臺會生成該app的唯一標識appId。在xcode中設置sppId步驟
xxAPP-->info-->URL Types-->URL Schemes-->輸入商戶自己的appId。
2.注冊appId
在xxAPP工程中引入微信lib庫和頭文件,調用微信的api之前,需要先向微信注冊商家的appId,代碼如下
[WXApi?registerApp:@"商家appId"?withDescription:nil];
3.調用支付
用戶在使用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???? 用戶取消