一、到后台获取参数
在导入微信支付的SDK之前先将商品信息价格等通过后台给的接口传到后台并得到必要的参数(现获取参数以便后期如果出错可以排除请求数据出错):参数类型如图:二、添加依赖库
打开工程->build phases ->link binary with libriaries三、添加scheme:打开项目target 选择 info 再选择URL types,填写微信开放平台申请的appID如图:
四、添加微信白名单,打开工程里的info.plist文件 添加LSApplicationQueriesSchemes数组并添加wechat 和 weixin字符串,如图:
五、在项目中target-->build setting -->other linker flags添加-Objc -all_load,不然程序会崩溃,如图:
六、添加代码
首先到appdelegate.m文件中,导入头文件 #import “WXApi.h",遵循协议 <WXApiDelegate>,然后再在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中设置appID,如图:七、现在去你要支付的页面(我的demo的ViewController.m文件中),将第一步获取的参数发送给后台,在获取参数的地方输入 [self WXPay];调用一下方法
-(void)WXPay{
//需要创建这个支付对象
PayReq *req = [[PayReq alloc] init];
//由用户微信号和AppID组成的唯一标识,用于校验微信用户
req.openID = @"";
// 商家id,在注册的时候给的
NSLog(@"resultDicAipay--%@",resultDicAipay);
req.partnerId = [resultDicAipay objectForKey:@"partnerId"];
// 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
req.prepayId = [resultDicAipay objectForKey:@"prepayId"];
// 根据财付通文档填写的数据和签名
//这个比较特殊,是固定的,只能是即req.package = Sign=WXPay
req.package = [resultDicAipay objectForKey:@"package"];
// 随机编码,为了防止重复的,在后台生成
req.nonceStr = [resultDicAipay objectForKey:@"nonceStr"];
// 这个是时间戳,也是在后台生成的,为了验证支付的
NSString * stamp = [resultDicAipay objectForKey:@"timeStamp"];
req.timeStamp = stamp.intValue;
// 这个签名也是后台做的
req.sign = [resultDicAipay objectForKey:@"sign"];
//发送请求到微信,等待微信返回onResp
[WXApi sendReq:req];
}
resultDicAipay是我创建的一个字典,将后台返回的参数存入字典里,根据需求取出传给后台,到这里就结束了。