aliPayPlus

config auth

概述

注意:

本模块是 aliPay 模块的升级版,主要区别是更新了支付宝移动端支付开放 SDK。新申请支付宝账号的开发者,应当使用本模块。aliPay 模块仅支持老版支付宝账号。新版支付宝账号接入,请参考支付宝官方文档 App 支付快速接入指南

支付宝简介

支付宝(中国)网络技术有限公司是国内领先的第三方支付平台,致力于提供“简单、安全、快速”的支付解决方案。支付宝公司从2004年建立开始,始终以“信任”作为产品和服务的核心。旗下有“支付宝”与“支付宝钱包”两个独立品牌。自2014年第二季度开始成为当前全球最大的移动支付厂商。 支付宝主要提供支付及理财服务。包括网购担保交易、网络支付、转账、信用卡还款、手机充值、水电煤缴费、个人理财等多个领域。在进入移动支付领域后,为零售百货、电影院线、连锁商超和出租车等多个行业提供服务。还推出了余额宝等理财服务。

支付宝与国内外180多家银行以及VISA、MasterCard国际组织等机构建立战略合作关系,成为金融机构在电子支付领域最为信任的合作伙伴。

支付宝特色功能

钱包

支付宝也可以在智能手机上使用,该手机客户端为支付宝钱包。支付宝钱包具备了电脑版支付宝的功能,也因为手机的特性,内含更多创新服务。如“当面付”、“二维码支付”等。 还可以通过添加“服务”来让支付宝钱包成为自己的个性化手机应用。 支付宝钱包主要在iOS、Android上使用,iPad版与WP版正在开发中。

安全

支付涉及到用户的资金安全,因此遵循官方的安全规范至关重要。 如安全控件、短信校验服务、数字证书、第三方证书、支付盾、宝令、宝令手机版、安全保护问题、安全策略、手机安全设置等。 大多数的支付服务都可以使用支付宝。从购物到水电燃气缴费,且正有部分取代现金的趋势。

还款

2009年1月15日支付宝推出信用卡还款服务,国内39家银行发行的信用卡均支持。是最受欢迎的第三方还款平台。 主要优势:免费查信用卡账单、免费还款,还有自动还款/还款提醒等增值服务。推荐使用支付宝钱包。 2014年第一季度,76%的还信用卡是用支付宝钱包完成的。

转账

通过支付宝转账分为两种:1、转账到支付宝账号,资金瞬间到达对方支付宝账户;转账到支付宝账户的限额2、转账到银行卡,用户可以转账到自己或他人的银行卡,支持百余家银行,最快2小时到账。支持到账的银行和到账时间、转账到银行卡的限额 推荐使用支付宝钱包,免手续费。

缴费

2008年底开始,支付宝推进公共事业缴费服务,已经覆盖了全国300多个城市,支持1200多个合作机构。除了水电煤等基础生活缴费外,其还扩展到交通罚款、物业费、有线电视费等更多与老百姓生活息息相关的缴费领域。 常用的在线缴费服务有: 水电煤缴费、教育缴费、交通罚款、有线电视费

服务窗

在支付宝钱包的“服务”中添加相关服务账号,就能在钱包内获得更多服务。包括银行服务、缴费服务、保险理财、手机通讯服务、交通旅行、零售百货、医疗健康、休闲娱乐、美食吃喝等10余个类目。 区别于其他公众服务平台,服务窗具有天然的支付基因、超亿的支付用户群体、以及严格审核的商户服务,这使得服务窗产生更大的生态价值。

模块概述

aliPayPlus封装了支付宝的新版 SDK,开发者只需配置从支付宝申请的相应的参数即可将支付宝功能集成到自己的 app。若当前设备(客户端)未安装支付宝 app,则调用内嵌网页版支付。支付宝支付处理流程请参考支付宝官方文档 。 支付宝服务器端代码参考服务的SDK

不能同时添加的模块:ipayNow,pingpp,aliPay,aliPayTrade,aliPayTradePlus

本模块封装了两套支付方案:

  • 方案一:开发者通过 payOrder 方法来进行支付,自己处理订单信息以及签名过程;

  • 方案二:通过 config 接口和 pay 接口把订单信息以及签名过程交予模块内部处理。config 接口的参数可通过 文件配置(此时需要云编译或自定义loader才能测试本功能)。本支付方案用于开发阶段测试验证账号的正确性,正式发版时请使用支付方案一

支付宝使用注意:

  1. 此模块必须在真机环境下使用
  2. 使用前商户必须与支付宝公司签约获得appId、商家私钥。详情可参看支付宝文档
  3. 商家私钥的生成见支付宝官方相关文档生成与配置密钥
  4. 使用此模块前需先配置 文件,方法如下:

    • 名称:aliPayPlus
    • 参数:urlScheme
    • 配置示例:

    • urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动支付宝客户端,也可以从支付宝客户端跳回本应用(此时需要云编译或自定义loader才能测试本功能)。urlScheme 的 value 值由字符串 ‘AliPayPlus’ 和本应用的 widgetId 拼接而成

密钥配置(适用于支付方案二)

下面说明下私钥的配置(支付方案一可忽略密钥的配置直接调用payOrder支付):商家私钥可通过 key.xml 文件设置,也可通过 config 接口配置。若选择通过key.xml 文件配置,则在自己的支付页面内直接调用 pay 接口传入相应参数即可,无需调用 config 接口。建议将商家私钥和配置在 key.xml 文件里,将该文件放在 widget 下的 res 文件下,服务器编译时会将此文件加密。注意测试此功能需云编译,否则报错。 aliPayPlus模块底层代码会自动读取该文件中的私钥等参数,提高安全性。key.xml 文件格式如下:

  1. ```js
  2. <?xml version="1.0" encoding="UTF-8" ?>
  3. <security>
  4. <item name="aliPayPlus_appId" value="*********"/>
  5. <item name="aliPayPlus_rsaPriKey" value="***"/>
  6. <item name="其它服务需加密的参数配置 " value="***"/>
  7. .
  8. .
  9. .
  10. </security>
  11. ```
  • 字段描述:

    aliPayPlus_appId:(必须配置)要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在管理中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID)。详情可参看支付宝文档开放平台应用创建指南

    aliPayPlus_rsaPriKey:(必须配置)商户私钥,用于支付过程中的签名,生成规范参考支付宝官方文档,。

关于授权登录本模块封装了两套方案:

使用登录功能前,请确保开通登录功能。详情参考 App支付宝登录快速接入

  • 方案一:开发者通过 authDirect 方法来进行授权,自己处理授权信息以及签名过程;

  • 方案二:通过 auth 接口把登录信息以及签名过程交予模块内部处理。 本案用于开发阶段测试验证账号的正确性,正式发版时请使用方案一

重要说明

这里只是为了开发者测试方便直接向开发者提供了 auth 接口,所以模块中加签过程直接放在模块内部(移动客户端)完成;真实App 发布时,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;

auth 接口已废弃

注意

  • android从v1.0.4版本开始,支持接入沙箱测试环境;具体的接入方法请参照
  • 项目上线时请务必接入正式环境

payOrder

调用支付宝客户端支付

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

params

orderInfo:

  • 类型:字符串
  • 描述:支付信息(由订单信息,签名,签名类型组成),支付信息生成(此过程可放在服务器端)可参照支付宝官方文档请求参数说明

sandbox:

  • 类型:布尔
  • 描述:(可选项) 是否是沙箱环境;沙箱环境是一个测试环境,项目上线时请务必接入正式环境;(ios不支持)具体的接入方法请参照

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: //字符串类型;错误码,取值范围如下:
  3. //9000:支付成功
  4. //8000:正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
  5. //4000:订单支付失败
  6. //5000:重复请求
  7. //6001:用户中途取消支付操作
  8. //6002:网络连接出错
  9. //6004:支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
  10. }

示例代码

  1. var aliPayPlus = api.require('aliPayPlus');
  2. aliPayPlus.payOrder({
  3. orderInfo: 'app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA2&timestamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D'
  4. api.alert({
  5. title: '支付结果',
  6. msg: ret.code,
  7. buttons: ['确定']
  8. });
  9. });

可用性

iOS系统,Android系统

可提供的1.0.1及更高版本

config

配置支付宝信息,适用于支付方案二

注意:不推荐使用此方式配置支付信息,建议在key.xml文件内配置,配置详情参考概述部分

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

params

appId:

  • 类型:字符串
  • 描述:申请的APP ID

rsaPriKey:

  • 类型:字符串
  • 描述:商户私钥

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: "" //数字类型;错误码,取值范围如下:
  3. //0:未知错误
  4. //1:缺少商户配置信息(appid,支付密钥)
  5. }
  1. var aliPayPlus = api.require('aliPayPlus');
  2. aliPayPlus.config({
  3. appId: '12345678901234',
  4. rsaPriKey: 'testKEY',
  5. }, function(ret, err) {
  6. api.alert({
  7. title: '支付结果',
  8. msg: JSON.stringify(ret),
  9. buttons: ['确定']
  10. });
  11. });

可用性

iOS系统,Android系统

pay

调用支付宝客户端支付,适用于支付方案二

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

params

subject:

  • 类型:字符串
  • 描述:交易商品名

body:

  • 类型:字符串
  • 描述:交易商品的简介

amount:

  • 类型:字符串
  • 描述:交易商品的价钱。单位为元,精确到分如:10.29(元)

tradeNO:

  • 类型:字符串
  • 描述:交易订单编号(由商家按自己的规则生成)

rsa2:

  • 类型:布尔
  • 描述:(可选项)是否是rsa2签名方式
  • 默认:false

sandbox:

  • 类型:布尔
  • 默认值:false

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: 1 //字符串类型;支付结果状态码,取值范围如下:
  3. //9000:支付成功
  4. //8000:正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
  5. //4000:订单支付失败
  6. //5000:重复请求
  7. //6002:网络连接出错
  8. //6004:支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
  9. //0001:缺少商户配置信息(商户id,支付公钥,支付密钥)
  10. //0002:缺少参数(subject、body、amount、tradeNO)
  11. //0003:签名错误(公钥私钥错误)
  12. }

示例代码

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

auth

支付宝授权登录,参数及其回调详细说明参考 App支付宝登录授权SDK调用方法

本案用于开发阶段测试验证账号的正确性,正式发版时请使用方案一

auth({params}, callback(ret))

params

appId:

  • 类型:字符串
  • 描述:支付宝分配给开发者的应用ID

targetId:

  • 类型:字符串
  • 描述:商户标识该次用户授权请求的ID,该值在商户端应保持唯一

partner:

  • 类型:字符串
  • 描述:(可选项)签约的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成,若不传则模块从 key.xml 文件读取该参数

rsaPriKey:

  • 类型:字符串
  • 描述:(可选项)商户私钥,若不传则模块从 key.xml 文件读取该参数

authType:

  • 类型:字符串
  • 描述:(可选项)授权类型
  • 默认:’AUTHACCOUNT’
  • 取值范围:
    • AUTHACCOUNT:授权
    • LOGIN:登录

rsa2:

  • 类型:布尔
  • 描述:(可选项)是否是rsa2签名方式
  • 默认:false

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. resultStatus: '9000', //字符串类型;本次操作的状态返回值,标识本次调用的结果,参见“resultStatus状态代码”。
  3. result: 'success=true&auth_code=9c11732de44f4f1790b63978b6fbOX53&result_code=200&alipay_open_id=20881001757376426161095132517425&user_id=2088003646494707',
  4. //字符串类型;本次操作返回的结果数据。result_code具体状态码值请参见“result_code状态代码”。仅当resultStatus为“9000”且result_code为“200”时,代表授权成功。auth_code表示授权成功的授码。
  5. memo: '处理成功' //字符串类型;保留参数,一般无内容。
  6. }

示例代码

  1. var aliPayPlus = api.require('aliPayPlus');
  2. aliPayPlus.auth({
  3. appId: '2014123100022800',
  4. partner: '2088123456789012',
  5. targetId: 'kkkkk091125',
  6. rsa2: false
  7. }, function(ret) {
  8. alert(JSON.stringify(ret));
  9. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

authDirect

支付宝授权登录,参数及其回调详细说明参考

authDirect({params}, callback(ret))

params

authInfoStr:

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. resultStatus: '9000', //字符串类型;本次操作的状态返回值,标识本次调用的结果,参见“resultStatus状态代码”。
  3. result: 'success=true&auth_code=9c11732de44f4f1790b63978b6fbOX53&result_code=200&alipay_open_id=20881001757376426161095132517425&user_id=2088003646494707',
  4. //字符串类型;本次操作返回的结果数据。result_code具体状态码值请参见“result_code状态代码”。仅当resultStatus为“9000”且result_code为“200”时,代表授权成功。auth_code表示授权成功的授码。

示例代码

可用性

iOS系统,Android系统

可提供的1.0.1及更高版本