集成 WeChat SDK - 支付篇
作者感言
惯例, 开头都是要说些东西的了, 随着现在的App越来越商业化, 很多公司的App都会集成第三方的支付SDK, 这样子的成本就比较低, 但是呢, 有很多朋友还是不太会集成, 也不太爱看集成文档(我也是~), 想了想, 还是写一篇关于支付的文章吧, 现在写的是
微信支付
, 过段时间就把支付宝
,银联
,Apple Pay
的也补上.最后:
如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考你们的意见再进行修改, 联系我时, 请备注WeChat支付
如果觉得好的话, 希望大家也可以打赏一下~嘻嘻~祝大家学习愉快~谢谢~
简介
微信SDK, 一个集成了社会化分享以及财付通支付功能的SDK, 需要商家先去微信开放平台先登记注册, 审批过后才能获得商家ID, 这样子才能使用支付功能, 下面让我们一起来看看吧.
准备工作
首先, 我们要来做好准备工作:
- 1.申请商家ID
- 2.申请App ID
- 3.下载, 集成SDK包
- 4.添加依赖包
- 5.最后, 调起支付
做好以上的工作, 微信的SDK集成就告一段落了~
申请商家ID
这里就不做详细介绍了, 毕竟我们这里讲的是如何集成SDK, 如果想了解的童鞋, 可以自行去微信公众平台自行查看哈~
申请App ID
申请
App ID
这里也不做介绍, 这个步骤也很简单, 直接去微信开放平台, 根据对应的指导信息, 一步一步的往下填写就OK了, 微信的App ID
是需要审核时间的, 快的话几分钟, 慢的话, 慢慢等吧~~
下载SDK包
下载SDK包, 这个更加的简单了, 直接去到资源中心看到
iOS开发工具包64位
就赶紧毫不犹豫的直接点下载,
下载完成之后, 我们来看看SDK包里都有啥
我看了看2.0版本的Demo, 里面居然是没有微信支付的相关代码, 这相当蛋疼, 如果是第一次集成的童鞋们, 那就要哭了...不过好在我们用庞大的互联网搜索引擎, 谷歌, 百度, 这些问题都是可以解决的,
再废话一段
废话讲了那么多, 现在让我们来看看怎么集成DSK包, 我们先创建一个
WorkSpace
文件, 叫PayProject
, 然后再创建我们的第一个工程WeChatPay-Objective-C
, 由于之前有人和我反应过, 为啥没有Swift
版本的, 其实不是我想写Swift
版本, 是它的语法到现在居然都还没有定型, 每个版本改一丢丢, 这比较蛋疼, 现在有人反应, 那我今后也把Swift
版本给补上吧, 如果以后语法继续有更改, 那大家就根据自己的编程经验以及Xcode
的提示自行修改哈~~
配置工程
打开我们创建好的
WeChatPay-Objective-C
工程, 把SDK
包拖进去, 这里的文件夹我改名字了, 你们也可以根据你们自己的喜好来改
添加完
SDK
包之后, 我们还要操作某些东西, 因为在iOS 9
之后, 苹果限制了正常的HTTP
请求, 如果我们要继续用, 就得先配置一下~~在微信的SDK
文件夹里也有声明
打开工程, 找到工程的
Info.plist
文件, 直接添加就好了, 有时候Xcode不会提示, 需要我们手动填入, 这个就比较蛋疼了, 我这里就列举出来吧
- Application requires iPhone environment
- LSApplicationQueriesSchemes
- App Transport Security Settings
- Allow Arbitrary Loads
添加完这些之后, 还是不够的, 我们需要去添加一个
URL Schemes
, 这里我先提供一个App ID
, 是从以前的微信官方Demo里拷贝下来的~~wxb4ba3c02aa476ea1
, 童鞋们自动复制粘贴哈, 这个时候, 我们就要打开工程配置了, 然后添加微信的URL Schemes
到这一步, 基本上这个阶段已经告已段落了, 继续下一个阶段~~~
添加依赖包
使用第三方
SDK
最蛋疼的一件事就是需要添加很多的依赖包, 因为第三方需要做数据的收集, 或者其他操作之类的, 这样子你才能在他们的后台列表了查询到你的App流量, 微信的依赖包有好几个,
- UIKit.framework
- Foundation.framework
- SystemConfiguration.framework
- CoreTelephony.framework
- Security.framework
- libz.tbd
- libc++.tbd
- libsqlite3.tbd
现在我们就来添加这些依赖包吧, 怎么添加应该不用我说了吧0.0
注册AppID
前期工作我们都做完了, 现在我们就用代码来实现微信支付~, 首先我们肯定要先注册一下微信
App ID
, 不然别说支付了, 就连分享神马之类的功能你都没法用, 打开AppDelegate.m
, 导入WXApi.h
文件, 注册App ID
, 这个App ID
, 就是我刚刚提供的那个wxb4ba3c02aa476ea1
.
布局UI
要调起微信支付, 我们肯定要有一个点击事件, 这里的
UI
, 我们就只给个UIButton
和一个Action
事件就好了.
调起微信支付
重头戏来了, 前面做了那么多的工作, 写了那么多的废话, 只为了现在真正的调起微信支付进行支付~~
实现代码都给你们贴出来了~这是我在以前的官方Demo中拷贝出来的~
PS: 这里是Demo, 所以这里拿到的神马签名啊, 商户ID, 支付链接神马的, 都是写在客户端的, 但在实际开发当中, 这是强烈不建议在客户端内自己生成, 一定一定要由服务器返回, 不然你会非常深刻的了解到蛋疼这个词语是啥意思~~
NSString *urlString = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (data != nil) {
NSError *error;
NSMutableDictionary *dictionart = NULL;
dictionart = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves
error:&error];
NSLog(@"URL: %@", urlString);
if (dictionart != nil) {
NSMutableString *retCode = [dictionart objectForKey:@"retcode"];
if (retCode.integerValue == 0) {
NSMutableString *stamp = [dictionart objectForKey:@"timestamp"];
// 调起微信支付
PayReq *req = [[PayReq alloc] init];
req.partnerId = [dictionart objectForKey:@"partnerid"];
req.prepayId = [dictionart objectForKey:@"prepayid"];
req.nonceStr = [dictionart objectForKey:@"noncestr"];
req.timeStamp = stamp.intValue;
req.package = [dictionart objectForKey:@"package"];
req.sign = [dictionart objectForKey:@"sign"];
[WXApi sendReq:req];
// 日志输出
NSLog(@"appid = %@", [dictionart objectForKey:@"appid"]);
NSLog(@"partnerId = %@", req.partnerId);
NSLog(@"prepayId = %@", req.prepayId);
NSLog(@"nonceStr = %@", req.nonceStr);
NSLog(@"timeStamp = %d", req.timeStamp);
NSLog(@"package = %@", req.package);
NSLog(@"sign = %@", req.sign);
} else {
NSLog(@"retmsg: %@", [dictionart objectForKey:@"retmsg"]);
}
} else {
NSLog(@"服务器返回错误, 未获取到JSON对象");
}
} else {
NSLog(@"服务器返回错误");
}
}];
处理回调结果
实现代码我们都搞定了, 现在我们差的就是要处理微信回调回来的结果, 无论你支付成功或者是支付失败, 还是微信服务器爆炸了, 这个结果我们都要获取到, 还有对应的
errCode
.打开
AppDelegate.m
, 我们要添加微信的代理协议, 实现一个微信的代理方法, 以及AppDelegate
的两个方法
具体实现的代码
- (void)onResp:(BaseResp *)resp {
if ([resp isKindOfClass:[PayResp class]]) {
NSString *stringMessage = @"支付结果";
NSString *stringTitle = @"支付结果";
switch (resp.errCode) {
case WXSuccess:
stringMessage = @"支付结果: 成功!";
NSLog(@"支付成功 - PaySuccess, retCode = %d", resp.errCode);
break;
default:
stringMessage = [NSString stringWithFormat:@"支付结果: 失败!, retcode = %d, retstr = %@", resp.errCode, resp.errStr];
break;
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:stringTitle
message:stringMessage
delegate:nil
cancelButtonTitle:@"好的"
otherButtonTitles:nil, nil];
[alertView show];
}
}
- (BOOL)application:(UIApplication *)application
handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
最终效果
工程地址
项目地址: https://github.com/CainRun/PayProject
集成 WeChat SDK - 支付篇的更多相关文章
- 使用开源库MAGICODES.WECHAT.SDK进行微信公众号支付开发
概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解.可加群获取原始文档. 本篇主要讲解微信支付的开发流程,相关业务基于MAGICODES.WECHAT.SDK实现.通过本篇教程,您可以很 ...
- 集成支付宝钱包支付iOS SDK的方法与经验
流程 摘自第一个文档<支付宝钱包支付接口开发包2.0标准版.pdf> 图中的“商户客户端”就是我们的iOS客户端需要做的事情: 调用支付宝支付接口 处理支付宝返回的支付结果 在调用支付宝支 ...
- 集成支付宝钱包支付ios SDK的方法和经验
没想到,支付宝的SDK是我目前用过的所有第三方SDK中最难用的一个了. 下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 “请点此下载集成开 ...
- 集成支付宝钱包支付 iOS SDK 的方法与经验
下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 (http://t.cn/8ksiklD)的 “请点此下载集成开发包(http://t.cn/ ...
- 开源库Magicodes.WeChat.SDK总体介绍
目录 1 概要 1 2 主要特点 2 3 架构图 8 3.1 构造器——WeChatSDKBuilder 8 3.2 函数管理器——WeChatF ...
- 李洪强iOS开发支付集成之微信支付
iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...
- 李洪强iOS开发支付集成之支付宝支付
iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...
- iOS开发支付集成之支付宝支付
项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...
- iOS开发支付集成之微信支付
这一篇是<iOS开发之支付>这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付.在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更 ...
随机推荐
- CentOS 7 (无盘安装)PXE服务器的搭建(失败求助版)
折腾了一天半,PXE无盘服务器以暂时失败而告终. 基本原理 1. 首先客户端主机需要支持PXE,大部分主板都支持. 2. PXE服务器需要安装DHCP.TFTP.FTP服务. 3. DHCP服务用来给 ...
- V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)
The damped least squares method is also called the Levenberg-Marquardt method. Levenberg-Marquardt算法 ...
- LINQ 简单用法【1】
LINQ:Language INtegrated Query,语言集成查询. 以下内容演示如何利用LINQ进行增加,修改,删除和查询操作,针对数据库. 首先创建Linq Class. 添加数据库信息, ...
- MVC客户端验证配置
<appSettings> <add key="ClientValidationEnabled" value="true"/> < ...
- [转]--android studio 使用gradle 导出jar包,并打包assets目录
转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html 最近项目在做一个sdk,供别的开发者使 ...
- mypc--------------->lspci,lsusb,meminfo cpuinfo ioports filesystems interrupts mounts net partitions pagetypeinfo slabinfo timer_list uptime version zoneinfo 等配置信息
[user@username home]$ lspci00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Contro ...
- 学习日记day7:代码结构规范
1:绝对定位不是随便用的. 2:一定要用相对定位控制文档流,在相对定位里面使用绝对定位控制具体的位置. 3:代码结构尽量简化. 不要加不必要的span: 不要加不必要的类: 4:控制字体样式的类尽量写 ...
- (linux) 常用命令 干货
内容提要 1. 第一难度, 重要 梯队 (grep, awk, sed, find, ) 2. 第二常用, 重要 梯队 (ps, ls, date, fuser, netstat, kill) 3. ...
- dateTimePicker的使用,时间控件
<li> <label>促销时间<span class="imprt">*</span></label> <inp ...
- mysql 执行计划的理解
1.执行计划就是在sql语句之前加上explain,使用desc 也可以.2.desc有两个选项extended和partitions,desc extended 将原sql语句进行优化,通过show ...