iOS接入微信支付

来源:互联网 发布:ts中怎么定义一个数组 编辑:程序博客网 时间:2024/04/29 15:59

首先在微信官网上下载最新的sdk,下载的是SDK1.6.2
1、iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。
受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2、开发者需要在工程中导入 CoreTelephony.framework,SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib

3,在Build Settings -->Search Paths -->FrameWork Search Paths和Library Search Paths 中的路经是否正确

路经$(PROJECT_DIR)/工程名/路经文件名/sdk文件名

4,在 Info-->URL Tyoes 中添加微信的URL Schemes 就是微信的开发的appId

5,在AppDelegate的didFinishLaunchingWithOptions方法中实现微信注册

[WXApi registerApp:WXAppId withDescription:@"标示名"];

6,服务端返回的签名接入,也是最主要的,若服务端二次签名出错,会出现跳转到微信支付页,只有“确定”按钮

服务端签名字段主要有partnerid prepayid package noncestr timestamp appid 和 key(申请的微信app的key,这个key值存在争议,网上有的二次签名不需要传入,但是我们做的时候不传入会出现上面的问题)

代码如下:

            //调起微信支付            PayReq* req             = [[PayReq alloc] init];            req.partnerId           = responseObject[@"data"][@"partnerid"];            req.prepayId            = responseObject[@"data"][@"prepayid"];            req.package             = responseObject[@"data"][@"package_"];            req.nonceStr            = responseObject[@"data"][@"noncestr"];            req.timeStamp           = (UInt32)[responseObject[@"data"][@"timestamp"] integerValue];            req.sign                = responseObject[@"data"][@"sign"];            [WXApi sendReq:req];


ps:关于微信支付后,不走回调onResp方法
本人用的是最新版的SDK 1.6.2,因为最新版的SDK 把下面的两个回调方法废弃了,有可能会出现支付完,不走onResp回调方法

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

解决方法,用最新的,如下
-(BOOL)application:(UIApplication*)app openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options;

1 0