zoukankan      html  css  js  c++  java
  • 微信支付移动开发

    原文:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3

    文档中心:https://pay.weixin.qq.com/wiki/doc/api/index.html

    场景介绍

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

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

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

    交互细节例如以下:

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

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

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

    商户APP界面实例

    图8.1 商户APP界面实例

    跳转到微信支付

    图8.2 跳转到微信支付

    用户确认支付

    图8.3 用户确认支付

    第四步:输入正确password后,支付完毕,用户端微信出现支付详情页面。见图8.4。

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

    见图8.5。

    支付成功提示页面

    图8.4 支付成功提示页面

    返回到商户APP提示


    APP端开发步骤说明

    IOS开发要点说明

    下面项目开发环境以Xcode10.0,执行环境为IOS7.0为例。说明其开发中须要的操作。

    1、项目设置APPID

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

    IOS开发要点说明

    图8.7

    2、注冊APPID

    商户APPproject中引入微信lib库和头文件,调用API前,须要先向微信注冊您的APPID,代码例如以下:

    [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];

    3、调起支付

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

    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];

    注意:该sign生成字段名列表见调起支付API

    4、支付结果回调

    照微信SDK Sample,在类实现onResp函数,支付完毕后,微信APP会返回到商户APP并回调onResp函数。开发人员须要在该函数中接收通知。推断返回错误码,假设支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以client返回作为用户支付的结果,应以server端的接收的支付通知或查询API返回的结果为准。

    代码示比例如以下:

                -(void)onResp:(BaseResp*)resp{
    			  if ([respisKindOfClass:[PayRespclass]]){
    			      PayResp*response=(PayResp*)resp;
    			      switch(response.errCode){
    			          caseWXSuccess:
                          			//server端查询支付通知或查询API返回的结果再提示成功
                          			NSlog(@"支付成功");
                          	break;
                          	default:
                          	NSlog(@"支付失败。retcode=%d",resp.errCode);
                          	break;
                      }
                      	}
                    } 
                

    回调中errCode值列表:

    名称 描写叙述 解决方式
    0 成功 展示成功页面
    -1 错误 可能的原因:签名错误、未注冊APPID、项目设置APPID不对、注冊的APPID与设置的不匹配、其它异常等。

    -2 用户取消 无需处理。

    发生场景:用户不支付了。点击取消,返回APP。

    Android开发要点说明

    1、后台设置

    商户在微信开放平台申请开发应用后。微信开放平台会生成APP的唯一标识APPID。因为须要保证支付安全,须要在开放平台绑定商户应用包名和应用签名。设置好后才干正常发起支付。

    设置界面在【开放平台】中的栏目【管理中心 / 改动应用 / 改动开发信息】里面。如图8.8红框内所看到的。

    改动开发信息

    图8.8

    应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,比如DEMO中的package="net.sourceforge.simcpux"。

    应用签名:依据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,执行可生成应用签名串,如图8.9所看到的,绿色串即应用签名。

    签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

    改动开发信息

    图8.9

    2、注冊APPID

    商户APPproject中引入微信JAR包。调用API前,须要先向微信注冊您的APPID,代码例如以下:

    final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);

    // 将该app注冊到微信

    msgApi.registerApp("wxd930ea5d5a258f4f");

    3、调起支付

    商户server生成支付订单。先调用统一下单API(详见第7节)生成预付单,获取到prepay_id后将參数再次签名传输给APP发起支付。下面是调起微信支付的关键代码:

    IWXAPI api;

    PayReq request = new PayReq();

    request.appId = "wxd930ea5d5a258f4f";

    request.partnerId = "1900000109";

    request.prepayId= "1101000000140415649af9fc314aa427",;

    request.packageValue = "Sign=WXPay";

    request.nonceStr= "1101000000140429eb40476f8896f4c9";

    request.timeStamp= "1398746574";

    request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";

    api.sendReq(req);

    注意:该sign生成字段名列表见调起支付API

    4、支付结果回调

    參照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调)。在WXPayEntryActivity类中实现onResp函数,支付完毕后,微信APP会返回到商户APP并回调onResp函数,开发人员须要在该函数中接收通知,推断返回错误码,假设支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以client返回作为用户支付的结果。应以server端的接收的支付通知或查询API返回的结果为准。代码示比例如以下:

    publicvoidonResp(BaseRespresp){
    if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
    Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
    AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
    builder.setTitle(R.string.app_tip);
    }
    }

    回调中errCode值列表:

    名称 描写叙述 解决方式
    0 成功 展示成功页面
    -1 错误 可能的原因:签名错误、未注冊APPID、项目设置APPID不对、注冊的APPID与设置的不匹配、其它异常等。
    -2 用户取消 无需处理。发生场景:用户不支付了。点击取消,返回APP。

  • 相关阅读:
    Java设计模式の工厂模式
    写Java代码分别使堆溢出,栈溢出
    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
    Java集合---ConcurrentHashMap原理分析
    Java 集合类详解
    HashMap详谈以及实现原理
    Java设计模式の代理模式
    Java设计模式の单例模式
    mysql之 navicat表权限设置
    MySQL之You can't specify target table for update in FROM clause解决办法
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7109490.html
Copyright © 2011-2022 走看看