zoukankan      html  css  js  c++  java
  • iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客

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

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

    2. 下载微信支付sdk

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

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

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


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


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

    开发步骤

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

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


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


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

    (1):AppID

    (2):微信支付商户号

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

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




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

    接下来, 我们就新建一个微信project吧.

    创建好project以后呢, 我们去微信平台下载sdk

    链接: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#



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





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

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


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



    这个大家都非常熟练拉

    第二步:

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



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


    我们还回到上个页面.



    微信: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: 大家工作中写完以后要在真机上測试.



  • 相关阅读:
    VueRouter-编程式导航
    VueRouter-路由嵌套
    ubuntu安装qt时编译出现cstddef:50:10: fatal error: 'stddef.h' file not found
    六种常用位操作运算符原理及用途
    C语言编写程序的大小端问题
    linux系统中运行node进程,无法杀死进程
    满足客户的特殊需求,特殊轮播图非常规轮播图
    什么?你还不会通过纯js提交表单?
    什么?你还不会身份证号码验证?最全的身份证正则验证js
    什么!你想要封装好的ajax
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7281473.html
Copyright © 2011-2022 走看看