微信支付分为好几种,这里记录的是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 用户取消