iOS 集成微信支付
2017-03-17 00:00
148 查看
主要写下关键
发起支付
签名生成方法(方法名没有大写,因为微信参数拼接的时候,参数名要求全小写,怕出错,所以全部是是复制进去的……)
md5编码方式:
最后附一个签名检查工具,官方的
https://pay.weixin.qq.com/wiki/tools/signverify/
其实我是遇到另外一个更坑的东西。
appid和商户的key是boss直接给我的,安卓那边已经实现了支付,所以认为这两个参数是没问题的
当我被"商户下单id非法"这个问题坑了很久很久之后登陆开放平台,发现创建应用的时候没有勾选iOS……
发起支付
- (NSString *)jumpToBizPayWithDic:(NSDictionary *)dict { if (![WXApi isWXAppInstalled]) { return @"该设备没有安装微信"; } if (![WXApi isWXAppSupportApi]) { return @"该设备不支持微信"; } if(dict != nil){ NSString *orderId = [dict objectForKey:@"ordersn"]; UInt32 timeStamp = [self stamp]; NSString *nonceStr = [dict objectForKey:@"nonceStr"]; NSString *package = @"Sign=WXPay"; NSString *md5sign = [self signWithappid:wx_appid andnoncestr:nonceStr andpackage:package andpartnerid:PARTNER_Id andprepayid:orderId andtimestamp:timeStamp andkey:PARTNER_Id_key]; //调起微信支付 主要参数: PayReq* req = [[PayReq alloc] init]; req.partnerId = PARTNER_Id; // 商户id 这个是固定的,必须wx124 req.prepayId = orderId; // 订单号 这个是后台返回的(是预付订单号) req.nonceStr = nonceStr; // 随机数 (需要后台返回,不能自己生产,因为要保持一致) req.timeStamp = timeStamp; // 时间戳 (可以自己生成,也可以后台返回) req.package = package; // 扩展字段 (微信要求暂时传@"Sign=WXPay") req.sign = md5sign; // 这个签名最关键,也最容易出错,基本都被坑在这里(自己生成的,生成方法下面有) BOOL flag = [WXApi sendReq:req]; return @""; }else{ return @"服务器返回错误,未获取到json对象"; } }
签名生成方法(方法名没有大写,因为微信参数拼接的时候,参数名要求全小写,怕出错,所以全部是是复制进去的……)
//最坑的地方,需要仔仔细细的看文档,参数有顺序,所以我把顺序已经写死了。key必须放在最后。需要把7个参数拼接一起,然后md5编码(注意还是大写)。 - (NSString *)signWithappid:(NSString *)appid andnoncestr:(NSString *)noncestr andpackage:(NSString *)package andpartnerid:(NSString *)partnerid andprepayid:(NSString *)prepayid andtimestamp:(UInt32)timestamp andkey:(NSString *)key{ NSString *string = [NSString stringWithFormat:@"appid=%@&noncestr=%@&package=%@&partnerid=%@&prepayid=%@×tamp=%@&key=%@",appid,noncestr,package,partnerid,prepayid,[NSString stringWithFormat:@"%u",timestamp],key]; NSString * md5str = [self md5: string]; NSString *us = md5str.uppercaseString; return us; }
md5编码方式:
- (NSString *)md5:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5(cStr, strlen(cStr), result); // This is the md5 call return [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; }
最后附一个签名检查工具,官方的
https://pay.weixin.qq.com/wiki/tools/signverify/
其实我是遇到另外一个更坑的东西。
appid和商户的key是boss直接给我的,安卓那边已经实现了支付,所以认为这两个参数是没问题的
当我被"商户下单id非法"这个问题坑了很久很久之后登陆开放平台,发现创建应用的时候没有勾选iOS……
相关文章推荐
- 微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)
- iOS 集成微信支付
- iOS集成微信支付的一些坑:onResp不回调、只显示一个确定按钮、闪回
- iOS开发支付集成之微信支付
- iOS集成微信支付各种坑收录
- iOS 集成微信支付【转载】
- iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程
- iOS集成微信支付问题, 友盟SDK有干扰或者说是冲突的解决
- iOS开发集成微信支付
- iOS 支付宝和微信支付方式集成详解+(demo)
- iOS 集成微信支付
- iOS----支付(微信支付、支付宝支付、银联支付控件集成支付)(转)
- iOS开发支付集成之微信支付
- IOS集成微信支付或者支付宝支付功能小结
- 【第十二篇】微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)(转)
- iOS 集成微信支付【转载】
- iOS 集成微信支付
- iOS-集成支付宝支付、微信支付简单总结
- iOS开发集成微信支付