1.相關(guān)資料
支付SDK:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
APP端開發(fā)步驟說明:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
2.支付流程
步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
步驟2:商戶后臺收到用戶支付單,調(diào)用微信支付統(tǒng)一下單接口。
步驟3:統(tǒng)一下單接口返回正常的prepay_id,再按簽名規(guī)范重新生成簽名后,將數(shù)據(jù)傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay
步驟4:商戶APP調(diào)起微信支付。
步驟5:商戶后臺接收支付通知。
步驟6:商戶后臺查詢支付結(jié)果。
3.實際操作
(1)工程中拖入SDK,五個文件,其中read_me.text中是注意事項

(2)導(dǎo)入框架,之前有l(wèi)ibc++.tbd沒導(dǎo)入,出現(xiàn)報錯,下文會提到

(3)添加白名單,直接把read.text中所添加的選項復(fù)制到info.plist文件中就行。其中info.plist以sourcecode的方式打開

(4)將AppId設(shè)置為URL Schemes.

配置完畢,就可以愉快地敲代碼了
(1)首先在Appdelegate中注冊AppId,導(dǎo)入#import "WXApiManager.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//向微信注冊wxd930ea5d5a258f4f
[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"demo 2.0"];
return YES;}
//9.0之前的方法,為了適配低版本 保留
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];}
//9.0后的方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
//這里判斷是否發(fā)起的請求為微信支付,如果是的話,用WXApi的方法調(diào)起微信客戶端的支付頁面(://pay 之前的那串字符串就是你的APPID,)
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
(2)發(fā)起請求支付
在微信提供的demo中的WXApiRequestHandler.m文件中可以找到j(luò)umpToBizPay方法,核心內(nèi)容如下:
//調(diào)起微信支付
PayReq* req = [[[PayReq alloc] init]autorelease];
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];
(3)支付結(jié)果返回到WXApiManager中的onResp方法下
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付結(jié)果:成功!";
NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
break;
default:
strMsg = [NSString stringWithFormat:@"支付結(jié)果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr]; NSLog(@"錯誤,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
以上為基本流程,一下是個人所出現(xiàn)的問題
4.支付問題
(1)未添加的frame
Undefined symbols for architecture x86_64:
"operator delete[](void*)", referenced from:
+[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
"operator new[](unsigned long)", referenced from:
+[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決方案:Build Phase ->link Binary with libraries 中 添加 libc++.tbd
(2)未修改bitcode
