美文网首页
微信支付集成

微信支付集成

作者: reviewThis | 来源:发表于2018-04-22 20:39 被阅读69次

微信官方文档

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;

发起支付请求:

1.参数模型

@class DHXWXPayInfo;

@interface DHXOrderInfo : NSObject

//NOTE: 订单号

@property (nonatomic, copy) NSString *order_sn;

//NOTE: 支付方式

@property (nonatomic, copy) NSString *pay_way;

//NOTE: 微信支付参数

@property (nonatomic, strong) DHXWXPayInfo *wxPayInfo;

@end

@interface DHXWXPayInfo : NSObject

//NOTE: 由用户微信号和AppID组成的唯一标识,用于校验微信用户

@property (nonatomic, copy) NSString *appid;

//NOTE: 随机编码,为了防止重复的,在后台生成

@property (nonatomic, copy) NSString *noncestr;

//NOTE: 根据财付通文档填写的数据和签名

@property (nonatomic, copy) NSString *package;

//NOTE: 商家id,在注册的时候给的

@property (nonatomic, copy) NSString *partnerid;

//NOTE: 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你

@property (nonatomic, copy) NSString *prepayid;

//NOTE: 签名也是后台做的

@property (nonatomic, copy) NSString *sign;

//NOTE: 时间戳,也是在后台生成的,为了验证支付的

@property (nonatomic, copy) NSString *timestamp; @end

2.发起支付

if ([WXApi isWXAppInstalled]) {

NSLog(@"用户已安装微信");

PayReq *request = [[PayReq alloc] init];

request.partnerId = _orderInfo.wxPayInfo.partnerid;

request.prepayId= _orderInfo.wxPayInfo.prepayid;

request.package = _orderInfo.wxPayInfo.package;

request.nonceStr= _orderInfo.wxPayInfo.noncestr;

request.timeStamp= (UInt32)[_orderInfo.wxPayInfo.timestamp integerValue]; request.sign= _orderInfo.wxPayInfo.sign;

[WXApi sendReq:request];

}else {

NSLog(@"用户未安装微信");

}

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

其他编译报错:

other link flag     -Objc  -all_load

2.APP调起微信支付,提示商户支付下单id非法 (tip:注意参数传的是否正确)

解决方式:

仔细检查一下签名的字段是否正确,我做的时候找了半天发现有个字段写错了,提示id非法,默默的去哭会。。。

3.无法启动微信支付的问题  

解决方式:

(a).检查签名是否正确

(b)在URL Schemes中检查是否添加微信 appid

(c)是否注册appid

(d)检查数据类型是否正确

4.同样的签名android能用,iOS用就不行

解决方式:

第二次签名还是传给客户端都要用 @"Sign=WXpay",并且不能有空格

有时候服务端给的数据我们这边解决会多个空格或者解析出错,请仔细检查比对,实在不行把微信官方demo拿来套。

提别注意:

1>sign签名是否大写。

2>拼接的字符串是否按照ASCII码,从小到大排列。(建议用代码实现排序,不要手动排序,不然很容易出错的)

3>上传的参数格式"key=value&",这其中的key与value是否有错误(我就是因为一个参数的key少写了几个字母),包括是否少写了字母,写错了字母。4>是否拼接了商户自定义的密钥,也就是在微信商户平台里面自定义的密钥。并且判断是否与自己定义的密钥是否相同。

结果:


相关文章

网友评论

      本文标题:微信支付集成

      本文链接:https://www.haomeiwen.com/subject/gtqgkftx.html