微信支付遇到的各种坑及解决方案

按照官方文档配置

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>是否拼接了商户自定义的密钥,也就是在微信商户平台里面自定义的密钥。并且判断是否与自己定义的密钥是否相同。


如果还有什么你遇到的问题,可以在下面留言,共同学习进步,谢谢^_^

 








你可能感兴趣的:(iOS,Developer)