zoukankan      html  css  js  c++  java
  • 微信支付

    微信支付场景介绍:

    适用于商户在移动端APP中集成微信支付功能。

    商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。

    目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。

    官方文档: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
    交互细节如下:

    步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例。

    步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面,见图8.2。

    步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付见图8.3。

    第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。

    第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。

    ##案例介绍
    以下是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。

    商户系统和微信支付系统主要交互说明:
    步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
    步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
    步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
    步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
    步骤5:商户后台接收支付通知。api参见【支付结果通知API】
    步骤6:商户后台查询支付结果。,api参见【查询订单API】

    ##APP 开发步骤

    1. 设置appid

    商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。

    2.注册APPID

    商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
    [WXApi registerApp:@”wxd930ea5d5a258f4f” withDescription:@”demo 2.0”];

    3、调起支付
    商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:

    1
    2
    3
    4
    5
    6
    7
    8
    PayReq *request = [[[PayReq alloc] init] autorelease];
    request.partnerId = @"10000100";
    request.prepayId= @"1101000000140415649af9fc314aa427";
    request.package = @"Sign=WXPay";
    request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
    request.timeStamp= @"1397527777";
    request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
    [WXApi sendReq:request];

    4、支付结果回调
    照微信SDK Sample,在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       -(void)onResp:(BaseResp*)resp{        
    if ([respisKindOfClass:[PayRespclass]]){
    PayResp*response=(PayResp*)resp;
    switch(response.errCode){
    caseWXSuccess:
    //服务器端查询支付通知或查询API返回的结果再提示成功
    NSlog(@"支付成功");
    break;
    default:
    NSlog(@"支付失败,retcode=%d",resp.errCode);
    break;
    }
    }
    }

    回调中errCode值列表:

    名 称描述解决方案
    0 成功 展示成功页面
    -1 错误 可能的原因:签名错误,未注册appid,项目设置appid不正确,注册的appid与设置的不匹配,其他异常等
    -2 用户取消 无需处理。发生场景:用户中途取消支付,返回商户app

    微信支付业务流程与支付宝大致相同,但是有一点区别就是:

    微信支付需要先生成预支付订单.

    最怕你一生碌碌无为 还安慰自己平凡可贵
  • 相关阅读:
    微信第三方平台开发之代小程序实现业务
    解决Chrome网页编码显示乱码的问题
    .Net Core 使用 System.Drawing.Common 在CentOS下报错
    CentOS安装nmap端口查看工具
    解决Nginx反向代理不会自动对特殊字符进行编码的问题 如gitblit中的~波浪线
    Centos7最小安装化后安装图形界面
    手把手教您在 Windows Server 2019 上使用 Docker
    windows10下安装docker报错:error during connect
    git删除远程分支
    linux下shell显示git当前分支
  • 原文地址:https://www.cnblogs.com/fakeCoder/p/5113517.html
Copyright © 2011-2022 走看看