微信支付分為好幾種,這里記錄的是app微信支付流程。
適用場(chǎng)景
用戶使用xxAPP時(shí),需要通過微信支付完成某項(xiàng)報(bào)名。此時(shí)xxAPP調(diào)用微信提供的SDK調(diào)用微信支付模塊,接著xxAPP跳轉(zhuǎn)到微信支付頁面,由客戶完成支付,支付完成后跳回到xxAPP頁面,顯示支付結(jié)果。
APP端開發(fā)步驟如下:
1.在xxAPP工程里設(shè)置APPID
商家在微信開放平臺(tái)申請(qǐng)開發(fā)app應(yīng)用后,微信開放平臺(tái)會(huì)生成該app的唯一標(biāo)識(shí)appId。在xcode中設(shè)置sppId步驟
xxAPP-->info-->URL Types-->URL Schemes-->輸入商戶自己的appId。
2.注冊(cè)appId
在xxAPP工程中引入微信lib庫和頭文件,調(diào)用微信的api之前,需要先向微信注冊(cè)商家的appId,代碼如下
[WXApi?registerApp:@"商家appId"?withDescription:nil];
3.調(diào)用支付
用戶在使用xxApp完成支付功能時(shí),商家服務(wù)器會(huì)生成支付訂單,先調(diào)用微信的【統(tǒng)一下單API】生成預(yù)付單,獲取到prepay_id后將參數(shù)再次簽名傳輸給app發(fā)起支付。調(diào)用支付的關(guān)鍵代碼如下:
PayReq?*request?=?[[PayReq?alloc]?init];
request.partnerId?=?@"商戶號(hào)";
request.prepayId=?@"預(yù)支付交易會(huì)話ID";
request.package?=?@"Sign=WXPay";
request.nonceStr=?@"隨機(jī)字符串";
request.timeStamp=?@"時(shí)間戳";
request.sign=?@"簽名";
[WXApi?sendReq:request];
4.支付結(jié)果回調(diào)
參照微信SDK
Sample,實(shí)現(xiàn)onResp方法、完成支付后,微信app會(huì)返回到商家app頁面,并且回調(diào)onResp函數(shù),開發(fā)者需要在該方法中接收通知,判斷返
回碼,如果支付成功則去后臺(tái)查詢支付結(jié)果再展示給用戶實(shí)際支付結(jié)果。注意:不能以客戶端取到的錢數(shù)作為用戶支付結(jié)果,應(yīng)該以服務(wù)器端接收到的支付通知或查
詢API返回的結(jié)果為準(zhǔn)。代碼示例如下:
-(void)onResp:(BaseResp*)resp
{
if?([respisKindOfClass:[PayRespclass]])
{
PayResp*response=(PayResp*)resp;
switch(response.errCode)
{
case?0:
//服務(wù)器端查詢支付通知或查詢API返回的結(jié)果再提示成功
NSlog(@"支付成功");
break;
default:
NSlog(@"支付失敗,retcode=%d",resp.errCode);
break;
}}}
回調(diào)中errCode值列表
0????? 成功
-1???? 失敗
-2???? 用戶取消