aUnifyPay

来自于:官方立即使用

pay init payWithData

概述

银联商务全民付移动支付APP综合支付控件,主要为合作商户的手机客户端提供安全、便捷的支付服务。合作商户的手机客户端通过集成全民付移动支付APP综合支付控件安全快速的唤起钱包 APP(云闪付、微信、支付宝等)完成支付。

全民付移动支付APP支付是由银联商务整合全民付(银商钱包)、云闪付、安卓PAY、微信、支付宝等多种钱包推出的手机支付产品,用户在银联商务签约的商户APP上进行付款时,可选择这些钱包进行支付。详情参考 银联商务官方文档

本模块封装了银联商务全民付移动支付APP综合支付控件的SDK,包括微信、支付宝、全民付(银商钱包)、云闪付、安卓PAY支付这五种支付方式。

注意:

  • 在 iOS 端支付宝渠道如果支付请求发送成功,则会跳转至支付宝APP,并且支付完成后会停留在支付宝,因此商户 APP无法通过callbackBlock收到支付结果,请以后台的支付结果为准。
  • 在 Android 端必须使用升级环境编译,且最低版本要求为 4.4.2

使用此模块之前需先配置 config.xml 文件,方法如下

  • 名称:aUnifyPay
  • 参数:urlScheme、appId
  • 配置示例:
  1. <feature name="aUnifyPay">
  2. <param name="urlScheme" value="wxd0d84bbf23b4a0e4"/>
  3. <param name="urlScheme" value="unifyPayBackUrl"/>
  4. <param name="appId" value="wxd0d84bbf23b4a0e4"/>
  5. <param name="universalLink" value="https://bjtest.apicloud.com"/>
  6. </feature>
  • 字段描述:

    urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动目标客户端(如微信),目标客户端依靠本参数跳回本应用。urlScheme 的 value 值是从目标 App 的开放平台获取的 appid,如 微信的 appid 申请方法参考 微信开放平台接入文档。也可以是自定义的,如云闪付 unifyPayBackUrl(必须是以unifyPay开头的字符串,如unifyPay20190723、unifyPayBackUrl、unifyPayDemo)。支持同时配置多个 urlScheme,若未开通相应的支付功能可不配置。

    appId:(必须配置)商户注册的微信支付appId。appid 申请方法参考微信开放平台接入文档

    universalLink:(必须配置) 微信开发者Universal Link。申请方法参考微信文档之 配置应用的Universal Links

config 配置注意事项:

  1. 在 iOS 平台需配置 白名单。需配置 weixin、alipays、uppaysdk、uppaywallet、uppayx1、uppayx2、uppayx3 七个 item。示例如下:
  1. //多个值之间用英文逗号隔开
  2. <preference name="querySchemes" value="weixin,alipays,uppaysdk,uppaywallet,uppayx1,uppayx2,uppayx3" />
  1. 在android平台需要配置(iOS平台忽略此步骤),与其他使用百度地图模块可忽略此模块
  1. <meta-data name="com.baidu.lbsapi.API_KEY" value="d2oamESnhMkZykdI46rbubOf7sZ9ppGY"/>

value:百度地图 apiKey

iOS端注意事项: 1.创建 entitlements 文件,APICloud 平台上的开发者,可通过此文件告诉编译服务器开通 Associated Domain 功能。配置方法参考论坛帖子。配置示例如下:

  1. ```js
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  4. <plist version="1.0">
  5. <dict>
  6. <key>com.apple.developer.associated-domains</key>
  7. <array>
  8. <string>applinks:bjtest.apicloud.com</string>
  9. </array>
  10. </dict>
  11. </plist>
  12. ```

其中 com.apple.developer.associated-domains 对应的值 applinks:bjtest.apicloud.com 是配置的你的应用的Universal Links。详情参考 苹果文档

2.开通 Associated Domains。 登录苹果开发者账号,在左侧列表里找到 Identifiers,选中后再找到你的 Bundle ID (包名),选中该包名,配置开启其 Associated Domains 功能。

3.服务器端支持苹果 Universal Links。支持方法参考 论坛帖子

支付流程说明:

(1)用户在商户客户端中点击购买商品,商户客户端到商户后台发起下单;

(2)商户后台收到下单请求后,按照《银联商务全民付移动支付APP综合支付商户接入接口规范》文档要求向银商后台发送下单请求;

(3)银商后台接收到下单请求后,生成对应订单信息,并返回给商户后台(应答要素:appPayRequest等);

(4)商户后台接收订单信息,将订单信息返回至商户客户端;

(5)商户客户端使用订单信息(appPayRequest等)调用银商支付插件;

(6)银商支付插件根据传递订单信息唤起钱包APP(云闪付、微信、支付宝等)完成支付。

本模块封装了两套支付方案:一、通过 pay 接口,模块实现签名加密获取支付订单过程。此接口仅供开发阶段测试使用。正式上线请使用方案二;二、商户服务器端实现 1-4 步骤。获取支付的数据后调用 payWithData 接口支付。

pay

支付订单,本接口仅供开发阶段测试使用。

pay({params}, callback(ret, err))

params

payChannel:

  • 类型:字符串
  • 描述:支付渠道
  • 取值范围:
    • wxPay 微信支付
    • aliPay 支付宝支付
    • cloudPay 云闪付 (传此参数时,config.xml 必须配置对应的 urlScheme)
    • posFastPay 全民付移动支付

merOrderId:

  • 类型:字符串
  • 描述:商户订单号

mid:

  • 类型:字符串
  • 描述:商户号

tid:

  • 类型:字符串
  • 描述:机构商户号

goods:

  • 类型:JSON类型
  • 描述:商品详情
  • 示例:{“goodsId”:”666666”,

    1. "goodsName":"unify测试商品",
    2. "quantity":"1",
    3. "price":"1",
    4. "goodsCategory":"测试商品分类",
    5. "body":"测试商品说明"}

totalAmount:

  • 类型:字符串
  • 描述:总金额,单位分

MD5Key:

  • 类型:字符串
  • 描述:MD5Key

msgSrc:

  • 类型:字符串
  • 描述:消息来源

urlStr:

  • 类型:字符串
  • 描述:下单接口URL

mobile:

  • 类型:字符串
  • 描述:手机号

merchantUserId:

  • 类型:字符串
  • 描述:商户用户号

notifyUrl:

  • 类型:字符串
  • 描述:通知地址

srcReserve:

  • 类型:字符串
  • 描述:商户定制化展示的内容,长度不大于255

secureTransaction:

  • 类型:布尔类型
  • 描述:(仅android支持)是否担保交易

msgId:

  • 类型:字符串类型
  • 描述:(仅android支持)消息id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. resultCode:0000, //字符串类型;支付请求是否发送成功(成功0000,失败-1)。商户订单是否成功支付应该以商户后台收到支付结果。(仅ios支持)
  3. resultInfo:'' //数字类型;支付结果参数 (仅ios支持)
  4. resultMsg:'' //字符串类型;返回结果;(仅android支持)
  5. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: 1000 //数字类型;
  3. //错误码:
  4. //1000(用户取消支付)
  5. //1001(参数错误)
  6. //1002(网络连接错误)
  7. //1003 (支付客户端未安装)
  8. //2001 (订单处理中,支付结果未知(有可能已经支付成功),请通过后台接口查询订单状态)
  9. //2002 (订单号重复)
  10. //2003 (订单支付失败)
  11. //9999 (其他支付错误)
  12. msg: '' //字符串类型;支付失败描述
  13. }

示例代码

  1. //支付宝支付
  2. var aUnifyPay = api.require('aUnifyPay');
  3. aUnifyPay.pay({
  4. payChannel: 'aliPay',
  5. merOrderId: '1028201811201136',
  6. mid: '898310058124024',
  7. tid: 'ood12355',
  8. goods: {"goodsId":"666666",
  9. "goodsName":"unify测试商品",
  10. "quantity":"1",
  11. "price":"1",
  12. "goodsCategory":"测试商品分类",
  13. "body":"测试商品说明"},
  14. totalAmount: '100',
  15. msgSrc:'NETPAY_DEMO',
  16. MD5Key: 'dwpRz2B6akcp8fwp6JJjenHCH7FKHFcCPE3NkiMJAQzhtD3W',
  17. urlStr:'https://qr-test1.chinaums.com/netpay-route-server/api/',
  18. msgId:'apicloud001',
  19. mobile:'18513952315',
  20. secureTransaction:false
  21. }, function(ret, err) {
  22. if (ret) {
  23. alert(JSON.stringify(ret));
  24. } else {
  25. alert(JSON.stringify(err));
  26. }
  27. });
  28. //微信支付
  29. var aUnifyPay = api.require('aUnifyPay');
  30. aUnifyPay.pay({
  31. payChannel:'wxPay',
  32. merOrderId:'38168548768586438',
  33. mid:'898310172770131',
  34. tid:'89BG1669',
  35. goods:{"goodsId":"666666",
  36. "goodsName":"unify测试商品",
  37. "quantity":"1",
  38. "price":"1",
  39. "goodsCategory":"测试商品分类",
  40. "body":"测试商品说明"},
  41. totalAmount:'100',
  42. MD5Key:'fZjyfDK7ix7CKhhBSC8mQWTAtmp44JsTrbkkyKXtxNAxxPFT',
  43. msgSrc:'WWW.SHHXQWLKJ.COM',
  44. urlStr:'https://qr.chinaums.com/netpay-route-server/api/',
  45. merchantUserId:'3028201705071221163636273176',
  46. msgId:'dsa2231s',
  47. mobile:'18576825643',
  48. secureTransaction:false
  49. }, function(ret, err) {
  50. if (ret) {
  51. alert(JSON.stringify(ret));
  52. } else {
  53. alert(JSON.stringify(err));
  54. }
  55. });
  56. //云闪付支付
  57. var aUnifyPay = api.require('aUnifyPay');
  58. aUnifyPay.pay({
  59. payChannel:'cloudPay',
  60. merOrderId:'5000201811191219',
  61. mid:'898310148160568',
  62. tid:'12345678',
  63. goods:{"goodsId":"666666",
  64. "goodsName":"unify测试商品",
  65. "quantity":"1",
  66. "price":"100",
  67. "goodsCategory":"测试商品分类",
  68. "body":"测试商品说明"},
  69. totalAmount:'100',
  70. MD5Key:'AcZdi46z6GibDwi5WXQEdypEWt2WSdNH6RHT3YAwnmCWwQEG',
  71. msgSrc:'WWW.PRODTEST.COM',
  72. urlStr:'https://qr.chinaums.com/netpay-route-server/api/',
  73. msgId:'11023',
  74. secureTransaction:false
  75. }, function(ret, err) {
  76. if (ret) {
  77. alert(JSON.stringify(ret));
  78. } else {
  79. alert(JSON.stringify(err));
  80. }
  81. });
  82. //全民付移动支付
  83. var aUnifyPay = api.require('aUnifyPay');
  84. aUnifyPay.pay({
  85. payChannel:'posFastPay',
  86. merOrderId:'30285629311191686',
  87. mid:'898310058124024',
  88. tid:'00000001',
  89. merchantUserId:'3028201705071221163636273176',
  90. mobile:'18576825643',
  91. totalAmount:'100',
  92. msgSrc:'ERP_SCANPAY',
  93. MD5Key:'3ypmTzxdXhFty7HCrZynehjcjdcaAb3HDRwJQpTFYZfjWHEZ',
  94. urlStr:'https://qr.chinaums.com/netpay-route-server/api/',
  95. msgId:'apicloud001',
  96. secureTransaction:false
  97. }, function(ret, err) {
  98. if (ret) {
  99. alert(JSON.stringify(ret));
  100. } else {
  101. alert(JSON.stringify(err));
  102. }
  103. });

可用性

iOS 系统,Android 系统

可提供的 1.0.0 及更高版本

init

(仅android支持)初始化,android调用 pay 接口前需要先调用此接口

init({params}, callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:true, //布尔类型;初始化成功
  3. }

示例代码

  1. var aUnifyPay = api.require('aUnifyPay');
  2. aUnifyPay.init( function(ret, err) {
  3. if (ret) {
  4. alert(JSON.stringify(ret));
  5. } else {
  6. alert(JSON.stringify(err));
  7. }
  8. });

可用性

Android 系统

可提供的 1.0.0 及更高版本

payWithData

支付订单

payWithData({params}, callback(ret, err))

params

channel:

  • 类型:字符串
  • 描述:支付渠道
  • 取值范围:
    • wxPay 微信支付
    • aliPay 支付宝支付
    • cloudPay 云闪付 (传此参数时,config.xml 必须配置对应的 urlScheme)
    • posFastPay 全民付移动支付

appPayRequest:

  • 类型:字符串
  • 描述:支付数据

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. resultCode:0000, //字符串类型;支付请求是否发送成功(成功0000,失败-1)。商户订单是否成功支付应该以商户后台收到支付结果。(仅ios支持)
  3. resultInfo:'' //数字类型;支付结果参数 (仅ios支持)
  4. resultMsg:'' //字符串类型;返回结果;(仅android支持)
  5. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: 1000 //数字类型;
  3. //错误码:
  4. //1000(用户取消支付)
  5. //1001(参数错误)
  6. //1002(网络连接错误)
  7. //1003 (支付客户端未安装)
  8. //2001 (订单处理中,支付结果未知(有可能已经支付成功),请通过后台接口查询订单状态)
  9. //2002 (订单号重复)
  10. //2003 (订单支付失败)
  11. //9999 (其他支付错误)
  12. msg: '' //字符串类型;支付失败描述
  13. }

示例代码

  1. var aUnifyPay = api.require('aUnifyPay');
  2. aUnifyPay.payWithData({
  3. channel: 'posFastPay',
  4. appPayRequest: '*****'
  5. }, function(ret, err) {
  6. if (ret.resultCode == '0000') {
  7. alert(JSON.stringify(ret));
  8. } else {
  9. alert(JSON.stringify(err));
  10. }
  11. });

可用性

iOS 系统,Android 系统

可提供的 1.0.1 及更高版本