IOS开发入门iOS 教程 微信支付
白羽 2019-04-16 来源 :网络 阅读 525 评论 0

摘要:本文将带你了解IOS开发入门iOS 教程 微信支付,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门iOS 教程 微信支付,希望本文对大家学IOS有所帮助。


IOS开发入门iOS 教程 微信支付


最近项目要求添加一个微信支付的功能,要求是不需要服务端的配合,独立在客户端完成。
   开始看官方demo的时候发现客户端只有短短的几行代码便成功了,更关键的是文档中那些参数都解释的含含糊糊。结果花了我好几天的时间才最终弄好。现在细数其辛酸历程。
   ?123456789//调起微信支付                   PayReq*  req             =  [[[PayReq alloc]  init]autorelease];                   req.partnerId            = [dict  objectForKey:@"partnerid"];                   req.prepayId             = [dict  objectForKey:@"prepayid"];                   req.nonceStr             = [dict  objectForKey:@"noncestr"];                   req.timeStamp            =  stamp.intValue;                   req.package              = [dict objectForKey:@"package"];                   req.sign                 = [dict  objectForKey:@"sign"];                   [WXApi  sendReq:req];
   这就官方文档中最核心的调出支付的代码,我们所需要做的一切都是获取这六个参数。
   首先来一个个的解释这些参数
   partnerId :这个就是在你申请通过微信商户资料后发到你邮件的中的一个商户号
   
   106A3038-E2CA-46D0-9AFC-B86DF979D588.png
   prepayid : 这个是需要向微信服务器提交申请后返回的一个支付交易会话ID,详细的下面会提到。
   nonceStr : 这个是你自己生成的一个随机数。
   timeStamp : 这个是你生成的一个时间戳。10位!!!不是13位的那个!
   package : 这个目前是一个定死的值 Sign=WXPay。
   sign : 这个是自己根据参数生成的一个签名!最坑的就是它了!
   现在来一个的说如何得到这些参数值
   1、prepayid
   这个一般来说是在服务端申请好的,客户端直接获取就行。但是万恶的公司居然要求在客户端弄。
   乍一看无非是向微信的一个接口提交数据,然后就会返回了。
   但是这茫茫多的参数中其实隐藏着无数的细节,稍有不慎就返回一个大大失败,然后你就愁的一头包了。
   这些参数里面有一个是需要生成一个签名。
   大概就是说把一些参数按照ASCII的顺序先进行排序然后再拼接上一个key(这个key是你在申请成功商户资料后按照邮件中提示进行设置的,32位)。拼接好后进行MD5转码。看起来很轻松明了吧,但是这里面最大的一个坑就是他这个举例了!这个例子中只有寥寥几个参数,如果你就按照他这个也只是用这几个参数生成签名,那就怎么也获取不到这个prepayid了!实际上,这个签名里面所包含的参数是需要包含你所要提交获取prepayid的所有参数的!
   也就是前面给的官方文档中所有表示必须要的参数,当然除了你现在要生成的这个sign。
   顺便提一句,这里的提交数据是以XML的形式,解析数据也是XML的格式。
   这样就可以顺利的获得prepayid了。
   2、nonceStr
   这个很简单
   ?12345678910111213141516NSString * nonce_str = [self md5:[NSString  stringWithFormat:@"%d", arc4random() % 10000]];nonce_str =  [nonce_str uppercaseString]; - (NSString *) md5: (NSString *)  inPutText{    const char *cStr = [inPutText  UTF8String];    unsigned char  result[CC_MD5_DIGEST_LENGTH];    CC_MD5(cStr,  strlen(cStr), result);     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]             ]  lowercaseString];}
   其实就是一个随机数,怎么生成随你。有个不得不提的地方,这里的noncestr就是你在第一次生成签名时的那个随机数,不用再次生成了!
   3、timeStamp
   ?1NSString * timeString = [NSString stringWithFormat:@"%.0f",  [[NSDate date] timeIntervalSince1970]];
   这个地方需要提示一下
   ?1@property (nonatomic, assign) UInt32 timeStamp;
   他的类型是这个样的,而你生成的是一个字符串类型的,最后提交的时候需要进行转化的!
   4、sign
   这里的签名不同于你第一次申请prepayid的签名,这里的生成签名的参数是appid,prepayid,partnerid,timestamp,noncestr,package,这几个排序后再拼接key,最后生成一个sign。
   这样一看,其实还是很简答的嘛!果然还是我太蠢了.......好了,如果还是不行,请再看一遍,仔细的看一遍。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程