iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客

亲们, 首先让我们来看一下微信支付的流程吧.

1. 注冊微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些參数.

2. 下载微信支付sdk

3. client请求订单,后台与微信后台交互。返回给client支付參数

4. 调用微信client。由微信client和微信server打交道;

5. client和服务端都会收到支付结果;(前台消息不可靠。我们须要去后台验证,假设后台没有收到支付通知。后台去微信server验证然后将结果返回给client)

支付流程图(大家看一下支付流程).

那么我们如今就開始写微信支付的demo了.

开发步骤

1:去微信开放平台注冊应用

t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011">https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011

创建移动应用并成功之后会收到腾讯发来的邮件

通过邮件我们能获得重要的參数:

(1):AppID

(2):微信支付商户号

(4):前往商户平台完毕入驻

(4):API秘钥(自己设置即可。注意一定要32位字母加数字的组合)记得保存好秘钥。以后要使用

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

有了这些參数后,我们就能够开发自己的项目了.

接下来, 我们就新建一个微信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" />

下载好以后呢, 我们就開始集成SDK了


把左边的SDK拉到project里面哦.

大家会看到目录里面有集成SDK的步骤.

第一步: 在info.plist加入例如以下代码



这个大家都非常熟练拉

第二步:

加入须要的框架和依赖库 (ps: 官方文档没让加入libc++.tbd, 这点也是project报错的时候发现的...)

剩下的事情, 我们仅仅须要依照官方文档来做即可了, 亲们.

我们还回到上个页面.



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

微信: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的代码;

Demo下载地址:https://github.com/XiaoHanGe/WeChatPay.git
ps: 大家工作中写完以后要在真机上測试.

时间: 2024-08-24 14:11:27

iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客的相关文章

iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客

原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比較专业.识别率也非常高真对语音识别是比較精准的,可是非常多开发人员和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲.两者都能够申请高配额,针对用户较多的差点儿都一样. 基于免费而且支持离线我选择了百度离线语音识别.比較简单,UI设计多一点,以下写一下教程: 1.首

iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层, ARP, RARP // HTTP(短连接) // 1. 建立链接, 三次握手 // 2

iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台交互,返回给客户端支付参数 4. 调用微信客户端,由微信客户端和微信服务器打交道: 5. 客户端和服务端都会收到支付结果:(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微

iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:最近研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比较专业,识别率也很高真对语音识别是比较精准的,但是很多开发者和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲,两者都可以申请高配额,真对用户较多的几乎都一样.基于免费并且支持离线我

iOS中 流媒体播放和下载 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 iOS中关于流媒体的简介:介于下载本地播放与实时流媒体之间的一种播放形式,下载本地播放必须全部将文件下载完成后才能播放,而渐进式下载不必等到全部下载完成后再播放,它可以一边下载一边播放,在完成播放内容之后,整个文件会保存在手机上. 实时流媒体 实时流媒体是一边接收数据包一边播放,本地不保留文件副本,实时流式传输总是实时传送,可以实时实况转播,支持随机访问,用户可以快进或者快退以观看前面或后面的内容.实时流媒体传输

iOS中崩溃调试的使用和技巧总结 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 在iOS开发调试过程中以及上线之后.程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就须要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比較常见的. 如今网上有非常多关于解析崩溃信息的博客.可是大多质量參差不齐,或者有些细节没有注意到.今天写一篇博客总结一下我对崩溃调试的使用和技巧,假设有哪些错误或遗漏.还请指点.谢谢. 获取崩溃信息 在iOS中获取崩溃信息的方式有非常多,比較常见的

iOS中 扫描二维码/生成二维码详解 韩俊强的博客

最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]]; 每日更新关注:http://weibo.com/hanjunqi

iOS中 Realm的学习与使用 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发者交流QQ群:446310206  有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 所以重新做了一份 后面看到官网的中文文档更新不及时看着英文翻译了一点 搞的更乱了 :( 英文好的直接点右边->官方OC文档 Realm是一个移动端的数据库,Realm是SQLite和CoreData的替代者.它可以节省你成千上万行代码和数周的工作,并且

iOS中 本地通知/本地通知详解 韩俊强的博客

布局如下:(重点讲本地通知) 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notification种类,本地和远程.本地的Notification由iOS下NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notificat