首先在微信官网上下载最新的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;