关闭

ios 微信支付开发

标签: 微信支付sign签名微信开发问题微信支付和支付宝兼容
6202人阅读 评论(0) 收藏 举报
分类:

微信支付有很多坑的,官方提供的文档一点都不全面,而且demo也比较”羞涩”难懂。很多注意的细节都没有体现出来,走了很多弯路。于是,系统的开发流程如下。(完整的demo附在博客最后面)这里面包括微信支付开发和支付宝开发调用客户端的兼容处理。(两次签名放在移动端,博客中没提到没安装微信客户端的情况,也很简单[WXApi sendReq:request]调用这个方法的返回值为0即可判断。)
一、环境配置
1、首先是https协议访问,在plist设置白名单
这里写图片描述

2、当你工程中有微信分享、收藏、支付、登录等,需要在“Info.plist”里增加如下代码(LSApplicationQueriesSchemes)
这里写图片描述

3、解决bitcode编译不过问题
这里写图片描述

4、设置URL types
这里写图片描述

5、导入SDK(可从微信官方的demo移植过来)
这里写图片描述

6、导入系统依赖库
这里写图片描述

7、特别要注意的是
微信支付是以分为单位的,也就是说,如果你支付金额是保留两位小数,支付的金额必须*100后再传给微信支付平台,其他的依次类推。

二、代码开发
1、在程序入口(即applegate.m)需要进行的操作
这里写图片描述

2、增加如下代理方法,否则不回调微信客服端(也是在delegate.m文件中)
这里写图片描述

3、微信支付成功的回调函数
这个有必要说明下,官方文档是这样说明的:不能以客服端支付成功的结果就直接当做是订单支付成功的结果,要以服务器返回的订单状态为准,也就是说,客服端支付成功后,微信支付平台会给服务器发送支付成功的消息,后台修改订单状态,重新返回给客户端。简单就是,支付成功要发送给特定的视图控制器(带有微信支付功能的视图控制器)发送通知,让这个特定的视图控制去请求服务器订单的住状态。这个回调函数必须写在delegate.m中!!!
这里写图片描述

4、特定视图控制器的代码(带有微信支付功能的视图控制器)
4.1 提交预支付订单获得预订单id(这个过程必须经过两次签名,分别是不带参数签名和携带参数签名,当然,这些方法都已经在payRequsestHandler类封装好了,你只需要传参数调用方法就可以了)这个也是点击支付按钮的动作方法
这里写图片描述

4.2得到预支付订单,那么就可以调微信支付的客服端(4.2和4.1代码是连续的)
这里写图片描述
附带sign参数签名的独立封装的两个方法,没用payRequsestHandler封装的方法,自己写的,因为用了出现问题(问题截图如下),先代码截图,后面再提供可直接复制黏贴的代码块
问题截图:(相信很多人遇到过,100%是sign签名的问题)
这里写图片描述
方法一:
这里写图片描述
方法二:
这里写图片描述

4.3 上面的代码就可以完全解决微信支付问题,剩下最后一个步骤,支付成功返回app调用delegate的-(void)onResp:(BaseResp*)resp方法,那么这里要发送通知给特定的视图控制器,让他去请求后台的订单状态。这里要说明的是,你从那个界面调的微信支付后,返回还是在原处。只是回调方法必须在delegate中,所以必须在回调方法发送成功的通知。那么要在特定的视图控制器的视图即将出现的方法中,监听到这个通知,然后请求后台的订单状态。这里需要注意的是,需要重写dealloc方法,移除通知。
这里写图片描述

三、支付宝和微信支付的回调客户端的代理方法的兼容处理
这里写图片描述

四、demo分享地址
http://yun.baidu.com/share/link?shareid=2335946206&uk=3145514819

可供复制黏贴的代码(sign签名)
-(NSString )createMD5SingForPay:(NSString )appid_key partnerid:(NSString )partnerid_key prepayid:(NSString )prepayid_key package:(NSString )package_key noncestr:(NSString )noncestr_key timestamp:(UInt32)timestamp_key
{
NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
[signParams setObject:appid_key forKey:@”appid”];
[signParams setObject:noncestr_key forKey:@”noncestr”];
[signParams setObject:package_key forKey:@”package”];
[signParams setObject:partnerid_key forKey:@”partnerid”];
[signParams setObject:prepayid_key forKey:@”prepayid”];
[signParams setObject:[NSString stringWithFormat:@”%u”,(unsigned int)timestamp_key] forKey:@”timestamp”];
NSMutableString *contentString =[NSMutableString string];
NSArray *keys = [signParams allKeys];
//按字母顺序排序
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
//拼接字符串
for (NSString *categoryId in sortedArray) {
if ( ![[signParams objectForKey:categoryId] isEqualToString:@”“]
&& ![[signParams objectForKey:categoryId] isEqualToString:@”sign”]
&& ![[signParams objectForKey:categoryId] isEqualToString:@”key”]
)
{
[contentString appendFormat:@”%@=%@&”, categoryId, [signParams objectForKey:categoryId]];
}
}
//添加商户密钥key字段
[contentString appendFormat:@”key=%@”, @”这里填写商户密钥”];
NSString *result = [self md5:contentString];
return result;

}//创建发起支付时的sige签名

-(NSString ) md5:(NSString )str
{
const char *cStr = [str UTF8String];
unsigned char result[16]= “0123456789abcdef”;
CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
//这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,微信的大小写验证很逗
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]
];
}//MD5 加密

微信支付下载demo:http://download.csdn.net/detail/qq_18505715/9147787

2
3
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS开发支付那些事(一)微信支付

很多网友面试的时候 都会被问到你的APP使用什么支付,说下支付的流程,什么,不知道!!!!!!那就回家等通知吧 如何 就没有然后了 接入支付宝开流程 点击这里 iOS支付那些事(二)支付宝 ...
  • bruceyou1990
  • bruceyou1990
  • 2016-03-15 21:28
  • 1482

iOS 微信支付 开发流程

这个文章写的 比较不错 借此转发。  SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开...
  • mingenlong
  • mingenlong
  • 2016-09-01 15:50
  • 2078

iOS-支付宝&微信支付

一. 微信支付 1.所需要的材料 微信SDK 微信SDK在微信开放平台上面申请得到的参数 // 应用的APPID kWXAppID @"wxc82cXXXXXXXX" //...
  • u011452278
  • u011452278
  • 2017-06-02 18:00
  • 2434

iOS开发——微信支付业务流程说明(附官方文档接口)

iOS 微信支付详解(业务流程和具体代码)前言微信支付在目前的移动开发中也是相当常用的技术,地位、意义的也就没什么必要再多说了。其实就微信支付这个开发技术点并不是很难的技术要点,中文文档也说的蛮清楚的...
  • LL845876425
  • LL845876425
  • 2016-09-10 01:36
  • 905

iOS开发集成第三方微信支付和分享问题

前言 直入主题 有关微信支付问题 在这里就不再介绍有关微信支付申请的流程了,小白可以参看微信开放平台和微信服务号也可申请微信支付接口。这里是微信官方给的微信支付接入指南(然而并没有太大用...
  • jiang314
  • jiang314
  • 2016-08-29 20:17
  • 3108

ios开发_微信支付

原文链接:http://www.cnblogs.com/shaoting/p/5162706.html支付 iOS开发:微信 集成支付宝支付,微信支付建议使用下面两个,方便快捷.SDK建议...
  • xinyuan510214
  • xinyuan510214
  • 2016-02-02 10:53
  • 545

IOS开发--微信支付

iOS微信支付简易教程
  • a359696929
  • a359696929
  • 2016-05-24 01:53
  • 376

iOS微信支付开发

第一次集成微信支付出现了很多问题,当然微信支付如果是后台返回二次签名数据,这样做的话,就简单很多了,本文主要集中讲解的是微信支付如何在本地生成预支付订单,以及预支付订单的二次签名(ps.第一次写这样的...
  • lixingqiao01
  • lixingqiao01
  • 2015-12-23 17:22
  • 1298

IOS开发中的微信支付功能

最近要用微信支付功能,在此总结一下!   需要下面第三方支持   备注:JSONKit框架是基于MRC的,如果工程开发环境是ARC的话,请在编译时设定 编译参数 -fno-objc-arc...
  • iOSbird
  • iOSbird
  • 2016-02-24 09:03
  • 1941

Hbuilder 开发IOS 和 Android申请微信支付?那些懵逼的事?

首先在 manifest.json里SDK配置选项里先勾选上 微信支付 或者支付宝支付 然后https://open.weixin.qq.com/ 进入微信开发者平台,注册登录,成为开发者 选...
  • qq_30632003
  • qq_30632003
  • 2017-06-28 10:25
  • 518
    个人资料
    • 访问:145826次
    • 积分:2475
    • 等级:
    • 排名:第17180名
    • 原创:136篇
    • 转载:5篇
    • 译文:0篇
    • 评论:15条
    最新评论