微信支付
流程 :
移動端向后臺發(fā)送購物請求 -> 后臺發(fā)送相應(yīng)信息發(fā)給微信 -> 微信生成訂單反饋給后臺 -> 后臺反饋訂單信息給移動端 -> 移動端用相應(yīng)信息調(diào)用手機(jī)微信客戶端 -> 完成支付收到相應(yīng)反饋再給后臺發(fā)送完成信息備案存儲
移動端工作
1.下載微信支付SDK
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
2.在工程General中添加添加相應(yīng)靜態(tài)庫
3.在Info中添加 微信開發(fā)者ID
4.appDelegate中程序已啟動注冊微信支付
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"com.kdx.touchfound"];
return YES;
}```
5.發(fā)送用戶選擇貨品給后臺,獲取后臺回饋的訂單信息,填充后調(diào)用微信客戶端
NSMutableString *retcode = [dict objectForKey:@"retcode"];
if (retcode.intValue == 0){
NSMutableString *stamp = [dict objectForKey:@"timestamp"];
//調(diào)起微信支付
PayReq* req = [[PayReq alloc] init];
req.partnerId = [dict objectForKey:@"partnerid"];
req.prepayId = [dict objectForKey:@"prepayid"];
req.nonceStr = [dict objectForKey:@"noncestr"];
req.timeStamp = stamp.intValue;
req.package = [dict objectForKey:@"package"];
req.sign = [dict objectForKey:@"sign"];
[WXApi sendReq:req];
//日志輸出
NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
}
6.接收支付結(jié)果
在AppDelegate中遵守協(xié)議 <WXApiDelegate>
//用于接收支付結(jié)果
-
(void)onResp:(BaseResp *)resp {
if ([resp isKindOfClass:[PayResp class]]) {
NSString stringMsg,strTitle = @"支付結(jié)果";
switch (resp.errCode) {
case WXSuccess:
stringMsg = @"支付結(jié)果 : 成功";
NSLog(@"支付成功 - retcode = %d",resp.errCode);
break;default: stringMsg = @"支付結(jié)果 : 失敗"; NSLog(@"支付成功 - retcode = %d",resp.errCode); break; }
}
}
//用于應(yīng)用間跳轉(zhuǎn) (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}