最近由于项目紧张需求 ,需要在项目里集成微信支付的功能(附上微信支付集成文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)。轻车熟路,一通操作猛如虎,最后build崩了。发现pod进来的分享sdk和支付的冲突。 pod 'UMengUShare/Social/WeChat'进来后发现微信开放平台需要的头文件都在,这样我们按照文档很轻松的就可以集成了微信的分享功能。
再来集成支付功能,我们需要向微信发送一个结构体等待微信大佬的响应。
#ifndef BUILD_WITHOUT_PAY
/*! @brief 第三方向微信终端发起支付的消息结构体
*
* 第三方向微信终端发起支付的消息结构体,微信终端处理后会向第三方返回处理结果
* @see PayResp
*/
@interface PayReq : BaseReq
/** 商家向财付通申请的商家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;
@end
但是在刚刚我们pod进去的.h文件中 我们却没找到这个类。这个时候我在官方文档微信支付中看到,它pod是'WechatOpenSDK' 这个库其实 和我们导入的‘UMengUShare/Social/WeChat’这个库很类似 里面暴露出来的头文件基本都是一模一样。只是'WechatOpenSDK'这个库中的WXApiObject这个类中多了一个第三方向微信终端发起支付的消息结构体,在这个类中声明了个 @interface PayReq : BaseReq(见上)来唤起微信的支付功能。
可以看到两个明显冲突。我们需要微信支付,那么只能把下面中相同的文件删除。放心,并不会报红点。然后在拿到后台数据后
-(void)payBtnClickk{
PayReq* req = [[PayReq alloc] init];
req.openID = @"wx7c258ef701ff50aa";//由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录*/ appid = wxfba5a9c20a82864d;
req.partnerId = @"1514135121";//商家向财付通申请的商家id
req.prepayId = @"wx15165256383220c9340c25ce2638806399";//预支付订单
req.nonceStr = @"c6abcde734935526d8242dc6b597988f";//随机串,防重发
NSString * timeStr = @"1537001576";
req.timeStamp = [timeStr intValue];//时间戳,防重发
req.package = @"Sign=WXPay";//商家根据财付通文档填写的数据和签名
req.sign = @"1C2D7C340B3CF0AAEF13B4D302CEDE06" ;//商家根据微信开放平台文档对数据做的签名
if (![WXApi isWXAppInstalled] || ![WXApi isWXAppSupportApi]) {//判断用户是否安装微信
// [self alert:@"提示信息" msg:@"未安装微信客户端"];
return ;
}else {
[WXApi sendReq:req];//发送请求到微信,等待微信返回onResp
}
}
就能成功走起微信支付了。关于appkey的设置的问题 ,我只设置了分享的key也是可以的。
/* 设置友盟appkey */
[UMConfigure initWithAppkey:@"设置友盟appkey " channel:@"App Store"];
支付设置key
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现。
* iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param isEnableMTA 是否支持MTA数据上报
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) registerApp:(NSString *)appid enableMTA:(BOOL)isEnableMTA; 两者都写上,问题也不大。注意支付设置的key放在友盟分享的后面。问题不大