iOS微信支付步骤以及出现的问题总结(二)

前提是已经创建完应用了在微信的官网上。根据上一篇的微信获得支付能力的步骤,这一篇主要制作微信支付的demo。回顾上一篇内容请看iOS微信支付步骤以及出现的问题总结(一)

查看下一篇iOS微信支付步骤以及出现的问题总结(三) 。

往往回忆就是痛苦的因为记不住曾经的经历,还是喜欢简单粗暴。

1.微信支付的demo与SDK。网址

2.下载完之后,里面有好多的没用的文件,包括登录,分享,等等。(看到这里好恶心,为啥不单独做一个demo呢,哎,还能不能愉快的玩耍了)。

如下 的文件夹目录的内容:

demo目录


3.创建一个wxDemo工程。

4.查看微信的官方文档。iOS微信支付文档

5.因为现在 的工程是iOS9 ,所以需要配置网址与白名单。

配置网址与白名单

6.改变bitcode设置为NO。

改变bitcode为NO

7.添加URL Types,如下。

添加URL Schemes

8.添加微信SDK到wxDemo里面。

9.添加框架,用来安装应用。iOS文档链接 。需要添加以下库:

SystemConfiguration.framework,

libz.dylib,

libsqlite3.0.dylib,

libc++.dylib

如下图:

添加依赖库

10.在Appdelegate.m里面添加如下代码:

//注册微信支付

[WXApi       registerApp:@"wxXXXXXXXXXX"]; 此时运行编译,快捷键commd+b 运行程序会出现以下错误,以下是错误的信息:

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)

错误的图片:

错误信息的展示

11.修改错误操作,由于缺少一个依赖库:添加一个CoreTelephony.frame 依赖库,就可以解决了。

添加依赖库

12.根据微信里面的demo,添加需要的代码。以下是文件目录的一些解释:里面主要的方法就是支付的网络请求以及调用微信客户端的代码。

文件目录

13.添加一个按钮的方法,实现支付。

说明:支付目前来说有两种实现方式,一种是本地的app直接实现跳转进行支付;另一种方式是通过后台服务器进行网络请求。下面的这一种是通过服务器进行支付的跳转。

- (void)WXPay {

NSString*urlString=@"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";

//解析服务端返回json数据

NSError*error;

//加载一个NSURL对象

NSURLRequest*request = [NSURLRequestrequestWithURL:[NSURLURLWithString:urlString]];

//将请求的url数据放到NSData对象中

NSData*response = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];

if(response !=nil) {

NSMutableDictionary*dict =NULL;

//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中

dict = [NSJSONSerializationJSONObjectWithData:responseoptions:NSJSONReadingMutableLeaveserror:&error];

NSLog(@"********url:%@",urlString);

if(dict !=nil){

NSMutableString*retcode = [dictobjectForKey:@"retcode"];

if(retcode.intValue==0){

NSMutableString*stamp= [dictobjectForKey:@"timestamp"];

//调起微信支付  

//注意:此处的key一定要与demo中的key的字符一致,一个也不能少,一个也不能错。

PayReq* req= [[PayReqalloc]init];

req.partnerId= [dictobjectForKey:@"partnerid"];

req.prepayId= [dictobjectForKey:@"prepayid"];

req.nonceStr= [dictobjectForKey:@"noncestr"];

req.timeStamp= stamp.intValue;

req.package= [dictobjectForKey:@"package"];

req.sign= [dictobjectForKey:@"sign"];

[WXApisendReq:req];

//日志输出

NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dictobjectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign);

}else{

NSLog(@"%@",[dictobjectForKey:@"retmsg"]);

}

}else{

NSLog(@"服务器返回错误,未获取json对象");

}

}else{

NSLog(@"服务器返回错误");

}

}

14.在完成此处之后,点击支付按钮会出现下面的问题:

在跳转到支付界面之后,仅仅会出现一个“确定”的白色按钮。如下图:

支付出现问题

通过查找信息,是由于配置的参数问题。因此我们不用服务器端进行网络请求直接用自己生成这些参数,然后就可以实现支付功能了。

15.下面是获取参数的解释。

参数解释:

partnerId: 商家向财付通申请的商家id(就是自己的id,也就是在你申请开发者资质认证之后,有一个商户平台,这个平台对应的id,就是你自己的id。好像还没有说明白。)

获取方式:

打开链接,直接将微信发送给你的邮件里面的内容登陆商户平台,就找到了partnerid了。微信商户平台

邮件内容

prepayId: 预支付订单(需要向微信服务器提交申请后返回的一个支付交易ID)

获取方式:

这个一般情况下是服务器端已经申请好的,客户端直接调用。

a、微信的服务端返回的参数的说明:参数说明。(看着很乱,可是呢,还是太乱)

b、还要生成一个签名,这个官方文档也是写了。签名(虽然看着很简单,但是还是搞不定,坑太多,哎,没办法就是这么坑,多看几遍就好了)

根据微信的接口,返回的xml的数据参数。将数据解析之后,就能获得prepayid。


nonceStr: 随机串,防重发(随机字符串,不长于32位)

获取方式:

注意:#pragma mark-  需要引入依赖库libcommonCrypto.tbd并且引入头文件#import <CommonCrypto/CommonGigest.h>

const  char*str = [input   UTF8String];

unsigned   char   result[CC_MD5_DIGEST_LENGTH];

CC_MD5(str,strlen(str),result);

NSMutableString*  ret = [NSMutableString  stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];

for(int i = 0 ;i <CC_MD5_DIGEST_LENGTH;i++) {
 

[ret appendFormat:@"%02X",result[i]];

}

NSLog(@"%@",[ret  uppercaseString]);

注意:就是一个随机数。noncestr就是在第一次生成签名的时候的那个随机数,不要再次生成。


timeStamp:时间戳,防重发(标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数)

获取方式:

NSString* timeString = [NSString      stringWithFormat:@"%.0f"[[NSDate date]timeIntervalSince1970]];

由于:

@property(nonatomic,assign)UInt32  timeStamp;

所以在提交的时候需要转换成对应的格式,UInt32 格式。


sign:商家根据微信开放平台文档对数据做的签名,链接

这里的签名不同于你第一次申请的prepayid的签名,这里的签名的参数是appid,prepayid,partnerid,timestamp,noncestr,package   这几个排序后再拼接的key最后生成一个sign。


上面这些只是介绍了这些参数如何获取,在下面一篇文章中,开始仔细介绍,最后一步的支付流程,也就是配置参数、服务器相关的一些配置。


参考资源:

1.iOS--微信支付

2.iOS微信支付

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 前言:本篇文章目的在于梳理知识,巩固思想,学习总结。有什么好的建议,都可以留言。互相促进!总观,微信支付,也没心思...
    麦穗0615阅读 9,826评论 8 70
  • 目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难。如果你只是想实现该功能,一个方法足以...
    劉光軍_MVP阅读 1,425评论 0 7
  • 一直以来都挺喜欢画画的,但人又懒,迟迟不怎么动手。因为没有基础,没学过,这其中多少带着一点逃避的态度,越逃避越不会...
    桐桐tongle阅读 1,696评论 4 5
  • 最近遇到在Launcher中对于指定的app需使用使用指定的图标,实现类似于主题的功能。要实现这样的功能就要弄清楚...
    Exception_Cui阅读 1,398评论 2 1
  • 前言 不管开发什么游戏,游戏存档是个必不可少的功能,你可能需要保存玩家的一些信息,比如身上穿戴的装备,玩家角色所处...
    Zui阅读 6,939评论 6 33