iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客
亲们, 首先让我们来看一下微信支付的流程吧.
1. 注冊微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些參数.
2. 下载微信支付sdk
3. client请求订单,后台与微信后台交互。返回给client支付參数
4. 调用微信client。由微信client和微信server打交道;
5. client和服务端都会收到支付结果;(前台消息不可靠。我们须要去后台验证,假设后台没有收到支付通知。后台去微信server验证然后将结果返回给client)
支付流程图(大家看一下支付流程).
那么我们如今就開始写微信支付的demo了.
开发步骤
1:去微信开放平台注冊应用
创建移动应用并成功之后会收到腾讯发来的邮件
通过邮件我们能获得重要的參数:
(1):AppID
(2):微信支付商户号
(4):前往商户平台完毕入驻
(4):API秘钥(自己设置即可。注意一定要32位字母加数字的组合)记得保存好秘钥。以后要使用
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
有了这些參数后,我们就能够开发自己的项目了.
接下来, 我们就新建一个微信project吧.
创建好project以后呢, 我们去微信平台下载sdk
链接: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
下载好以后呢, 我们就開始集成SDK了
把左边的SDK拉到project里面哦.
大家会看到目录里面有集成SDK的步骤.
第一步: 在info.plist加入例如以下代码
第二步:
加入须要的框架和依赖库 (ps: 官方文档没让加入libc++.tbd, 这点也是project报错的时候发现的...)
剩下的事情, 我们仅仅须要依照官方文档来做即可了, 亲们.
我们还回到上个页面.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
微信:APPID:wx920fde9f97d60569
我们能够先使用这个APPID (ps: 这是同事的前公司的应用ID)
1、项目设置APPID
商户在微信开放平台申请开发APP应用后。微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。
这个我们依照文档做一下就能够了.
2、注冊APPID
商户APPproject中引入微信lib库和头文件。调用API前。须要先向微信注冊您的APPID。代码例如以下:
[WXApi registerApp:@"wxd930ea5d5a258f4f];
3、调起支付
商户server生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将參数再次签名传输给APP发起支付。下面是调起微信支付的关键代码:
如今我们仅仅须要在控制器上加入一个button, 名字改成微信支付就能够了
button事件:
- (IBAction)weChatPayButtonAction:(id)sender
{
PayReq *request = [[PayReq alloc] init];
/** 商家向財付通申请的商家id */
request.partnerId = @"1220277201";
/** 预支付订单 */
request.prepayId= @"82010380001603250865be9c4c063c30";
/** 商家依据財付通文档填写的数据和签名 */
request.package = @"Sign=WXPay";
/** 随机串,防重发 */
request.nonceStr= @"lUu5qloVJV7rrJlr";
/** 时间戳,防重发 */
request.timeStamp= 1458893985;
/** 商家依据微信开放平台文档对数据做的签名 */
request.sign= @"b640c1a4565b476db096f4d34b8a9e71960b0123";
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。 第三方应用程序等待微信返回onResp。 微信在异步处理完毕后一定会调用onResp。支持下面类型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 详细的发送请求。在调用函数后。请自己释放。
* @return 成功返回YES,失败返回NO。 */
[WXApi sendReq: request];
}
4、支付结果回调
依照微信SDKSample。在类实现onResp函数,支付完毕后,微信APP会返回到商户APP并回调onResp函数,开发人员须要在该函数中接收通知,推断返回错
误码。假设支付成功则去后台查询支付结果再展示用户实际支付结果。注意
一定不能以client返回作为用户支付的结果,应以server端的接收的支付通知或查询API返回的结果为准。
这是最后一步了, 我们在支付页面支付完毕以后呢要知道支付结果, 怎么做呢?
首先, 在AppDelegate.m里面实现该方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
/*! @brief 处理微信通过URL启动App时传递的数据
*
* 须要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* @param url 微信启动第三方应用时传递过来的URL
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。 * @return 成功返回YES,失败返回NO。
*/
return [WXApi handleOpenURL:url delegate:self];
}
接下来我们须要遵守下协议
最后一步, 就等支付结果出来以后回调一个函数了
/*! @brief 发送一个sendReq后,收到微信的回应
*
* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。 * @param resp详细的回应内容。是自己主动释放的
*/
- (void)onResp:(BaseResp *)resp
{
//支付返回结果,实际支付结果须要去微信server端查询
NSString *strMsg = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
NSLog(@"支付成功-PaySuccess。retcode = %d", resp.errCode);
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
iOS开发人员交流群:446310206
这样, 我们就完毕了微信支付iOSclient的代码;
ps: 大家工作中写完以后要在真机上測试.
iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客的更多相关文章
- iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客
原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人 ...
- iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客
近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客
简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 / ...
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...
- HTML5中 HTML格式化/HTML样式/链表/表格-样式 韩俊强的博客
HTML5学习从简单到复杂,循环渐进! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 1.HTML格式化 <!DOCTYPE html> <h ...
- iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/5111 ...
- HTML5中 HTML表单和PHP环境搭建及与PHP交互 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 知识点概括:HTML表单/PHP环境搭建/表单提交数据与PHP交互 第一部分:HTML表单 <!DOCTYP ...
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- iOS中 Realm的学习与使用 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...
随机推荐
- 【java】线程安全的整型类AtomicInteger
一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在 ...
- [BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演)
4815: [Cqoi2017]小Q的表格 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 832 Solved: 342[Submit][Statu ...
- 【树形dp】Treasure Hunt I
[ZOJ3626]Treasure Hunt I Time Limit: 2 Seconds Memory Limit: 65536 KB Akiba is a dangerous coun ...
- 【动态规划】【滚动数组】【bitset】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal
有两辆车,容量都为K,有n(10w)个人被划分成m(2k)组,依次上车,每个人上车花一秒.每一组的人都要上同一辆车,一辆车的等待时间是其停留时间*其载的人数,问最小的两辆车的总等待时间. 是f(i,j ...
- 【dfs序+AC自动机+树状数组】BZOJ2434-[Noi2011]阿狸的打字机
[题目大意] 输入一个字符串,其中:(1)a..z:在字符串末尾添加当前字符(2)P:输出当前字符串(3)B:从当前字符串末尾删去一个字符. 给出m组查询,输出第i个输出的字符串在第j个输出的字符串内 ...
- 给lnmp一键包中的nginx安装openresty的lua扩展
lnmp一键包(https://lnmp.org)本人在使用之后发现确实好用,能帮助我们快速搭建起lnmp.lamp和lnmpa的web生产环境,因此推荐大家可以多试试.但有的朋友可能需要使用open ...
- 2016.4.3NOI上较难的动规题目(仔细分析样例)--王老师讲课整理
1.NOI 191:钉子和小球 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每 ...
- Codeforces Beta Round #1 B. Spreadsheets 模拟
B. Spreadsheets 题目连接: http://www.codeforces.com/contest/1/problem/B Description In the popular sprea ...
- 连接mysql时1045错误的解决办法
重装系统后,今天mysql提示1045错误无法连接上,找了很久得出方法如下: 修改root密码即可正常. 1,进入mysql控制台选择: 2,use mysql; 3,update user set ...
- GitHub 给已存在的仓库增加开原协议LICENSE
如果你创建仓库时没有设置开原协议LICENSE,后续可以按下面方法增加开原协议LICENSE. 1.点击Create new file,如下图 2.文件名填LICENSE.md,右边就会出现choos ...