iOS 微信支付

作者: 青鸟evergreen | 来源:发表于2016-07-25 09:58 被阅读115次

1.相关资料
支付SDK:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
APP端开发步骤说明:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
2.支付流程
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
步骤6:商户后台查询支付结果。
3.实际操作
(1)工程中拖入SDK,五个文件,其中read_me.text中是注意事项

784420-20160308201043022-1244809995.png

(2)导入框架,之前有libc++.tbd没导入,出现报错,下文会提到

784420-20160308202413679-533818586.png

(3)添加白名单,直接把read.text中所添加的选项复制到info.plist文件中就行。其中info.plist以sourcecode的方式打开


C6581905-53F7-4234-9665-3C367F8233A0.png

(4)将AppId设置为URL Schemes.


7C749DAC-E024-4EDA-8228-5791FF50338C.png

配置完毕,就可以愉快地敲代码了
(1)首先在Appdelegate中注册AppId,导入#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{
    //这里判断是否发起的请求为微信支付,如果是的话,用WXApi的方法调起微信客户端的支付页面(://pay 之前的那串字符串就是你的APPID,)
    return  [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}

(2)发起请求支付
在微信提供的demo中的WXApiRequestHandler.m文件中可以找到jumpToBizPay方法,核心内容如下:

 //调起微信支付
                    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)支付结果返回到WXApiManager中的onResp方法下

switch (resp.errCode) { 
case WXSuccess: 
strMsg = @"支付结果:成功!"; 
NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode); 
break; 
default: 
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr]; NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr); 
break; 
}

以上为基本流程,一下是个人所出现的问题

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


屏幕快照 2016-07-25 上午9.22.27.png

相关文章

网友评论

    本文标题:iOS 微信支付

    本文链接:https://www.haomeiwen.com/subject/mbuijttx.html