按照官方文档配置
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
微信支付需要得到以下字段
/** 商家向财付通申请的商家id */
@property (nonatomic, retain) NSString *partnerId;
/** 预支付订单 */
@property (nonatomic, retain) NSString *prepayId;
/** 随机串,防重发 */
@property (nonatomic, retain) NSString *nonceStr;
/** 时间戳,防重发 */
@property (nonatomic, assign) UInt32 timeStamp;
/** 商家根据财付通文档填写的数据和签名 */
@property (nonatomic, retain) NSString *package;
/** 商家根据微信开放平台文档对数据做的签名 */
@property (nonatomic, retain) NSString *sign;
#pragma mark - 发起支付请求
- (void)WXPayRequest:(NSString *)appId nonceStr:(NSString *)nonceStr package:(NSString *)package partnerId:(NSString *)partnerId prepayId:(NSString *)prepayId timeStamp:(NSString *)timeStamp sign:(NSString *)sign{
//调起微信支付
PayReq* wxreq = [[PayReq alloc] init];
wxreq.openID = appId;
wxreq.partnerId = partnerId;
wxreq.prepayId = prepayId;
wxreq.nonceStr = nonceStr;
wxreq.timeStamp = [timeStamp intValue];
wxreq.package = package;
wxreq.sign = sign;
[WXApi sendReq:wxreq];
}
//可能会遇到的问题
1.注册微信的时候 commd + b 此时编译发现出现这种问题
[WXApi registerApp:@"wxXXXXXXXXXX"];
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in libWeChatSDK.a(MTAHelper.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方法:
根据提示添加少了依赖框架CoreTelephony.frame 依赖库 添加ok
2.获取预支付id时候,微信返回的信息是
解决方式:
微信开放平台是一个号可以申请多个app,但是要想开通微信支付,是一个app对应一个商户号的。每个app的商户号都是不同的。请检查是否一一对应。
3.app调起微信支付,提示商户支付下单id非法
解决方式:
仔细检查一下签名的字段是否正确,我做的时候找了半天发现有个字段写错了,提示id非法,默默的去哭会。。。
4.无法启动微信支付的问题
解决方式:
(a).检查签名是否正确
(b)在URL Schemes中检查是否添加微信 appid
(c)是否注册appid
(d)检查数据类型是否正确
5.同样的签名android能用,iOS用就不行
解决方式:
第二次签名还是传给客户端都要用 @"Sign=WXpay" ,并且不能有空格
有时候服务端给的数据我们这边解决会多个空格或者解析出错,请仔细检查比对,实在不行把微信官方demo拿来套。
提别注意:
1>sign签名是否大写。
2>拼接的字符串是否按照ASCII码,从小到大排列。(建议用代码实现排序,不要手动排序,不然很容易出错的)
3>上传的参数格式"key=value&",这其中的key与value是否有错误(我就是因为一个参数的key少写了几个字母),包括是否少写了字母,写错了字母。4>是否拼接了商户自定义的密钥,也就是在微信商户平台里面自定义的密钥。并且判断是否与自己定义的密钥是否相同。
如果还有什么你遇到的问题,可以在下面留言,共同学习进步,谢谢^_^