0.0.3 • Published 8 years ago
ali-pay
支付宝支付SDK。
Usage
npm install -S ali-pay
const fs = require('fs')
const path = require('path')
const Alipay = require('ali-pay')
const api = new Alipay({
appId: '',
publicKey: fs.readFileSync(path.join(__dirname, '/public_key.pem')),
privateKey: fs.readFileSync(path.join(__dirname, '/private_key.pem'))
})
api.pagePay({
subject: 'Iphone 7',
totalAmount: '6799'
}, (err, result) => {
if (err) {
return console.error(err)
}
console.log(result)
})
new Alipay(options)
返回Alipay实例对象。
options 配置对象
| 名称 | 类型 | 必填 | 描述 |
|---|
| appId | string | 是 | APPID 即创建应用后生成。 |
| publicKey | string | 是 | 开发者公钥,由开发者自己生成。 传入公钥的内容。 |
| privateKey | string | 是 | 开发者私钥,由开发者自己生成。 传入私钥的内容。 |
| charset | string | 否 | 请求使用的编码格式,如utf-8,gbk,gb2312等。默认utf-8。 |
| signType | string | 否 | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2。默认为RSA2。 |
| sandbox | boolean | 否 | 是否沙箱测试。默认false |
Alipay 实例方法
pay(options, callback) 统一收单下单并支付页面接口wapPay(options, callback) 手机网站支付pagePay(options, callback) 电脑网站支付create(options, callback) 统一收单交易创建接口precreate(options, callback) 统一收单线下交易预创建verify(options) 验签接口refund(options, callback) 统一收单交易退款接口refundQuery(options, callback) 统一收单交易退款查询接口query(options, callback) 统一收单线下交易查询接口close(options, callback) 统一收单交易关闭接口cancel(options, callback) 统一收单交易撤销接口settle(options, callback) 统一收单交易结算接口download(options, callback) 查询对账单下载地址
pay
收银员使用扫码设备读取用户手机支付宝“付款码”/声波获取设备(如麦克风)读取用户手机支付宝的声波信息后,将二维码或条码信息/声波信息通过本接口上送至支付宝发起支付。
options 对象属性
| 名称 | 类型 | 必填 | 描述 |
|---|
| subject | string | 是 | 订单标题 |
| authCode | string | 否 | 支付授权码,25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准 |
| notifyUrl | string | 否 | 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 |
| appAuthToken | string | 否 | 详见应用授权概述 |
| outTradeNo | string | 否 | 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 |
| scene | string | 否 | 支付场景条码支付,取值:bar_code声波支付,取值:wave_code。默认为bar_code |
| productCode | string | 否 | 销售产品码 |
| buyerId | string | 否 | 买家的支付宝用户id,如果为空,会从传入了码值信息中获取买家ID |
| sellerId | string | 否 | 如果该值为空,则默认为商户签约账号对应的支付宝用户ID |
| totalAmount | string | 否 | 订单总金额,单位为元,精确到小数点后两位,取值范围0.01,100000000 如果同时传入【可打折金额】和【不可打折金额】,该参数可以不用传入; 如果同时传入了【可打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【可打折金额】+【不可打折金额】 |
| discountableAmount | string | 否 | 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围0.01,100000000。 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】 |
| body | string | 否 | 订单描述 |
| goodsDetail | string | 否 | 订单包含的商品列表信息,Json格式,其它说明详见商品明细说明 |
| operatorId | string | 否 | 商户操作员编号 |
| storeId | string | 否 | 商户门店编号 |
| terminalId | string | 否 | 商户机具终端编号 |
| extendParams | string | 否 | 业务扩展参数 |
| timeoutExpress | string | 否 | 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m |
返回
| 名称 | 类型 | 描述 |
|---|
| err | error | 错误对象 |
| result | object | 结果对象 |
result 对象
| 名称 | 类型 | 描述 |
|---|
| code | string | 网关返回码,详见文档 |
| msg | string | 网关返回码描述,详见文档 |
| sub_code | string | 业务返回码,详见文档 |
| sub_msg | string | 业务返回码描述,详见文档 |
| sign | string | 签名,详见文档 |
| trade_no | string | 支付宝交易号 |
| out_trade_no | string | 商户订单号 |
| buyer_logon_id | string | 买家支付宝账号 |
| total_amount | number | 交易金额 |
| receipt_amount | string | 实收金额 |
| buyer_pay_amount | number | 买家付款的金额 |
| point_amount | number | 使用积分宝付款的金额 |
| invoice_amount | number | 交易中可给用户开具发票的金额 |
| gmt_payment | string | 交易支付时间 |
| fund_bill_list | object | 交易支付使用的资金渠道 |
| card_balance | number | 支付宝卡余额 |
| store_name | string | 发生支付交易的商户门店名称 |
| buyer_user_id | string | 买家在支付宝的用户id |
| discount_goods_detail | string | 本次交易支付所使用的单品券优惠的商品优惠信息 |
| voucher_detail_list | object | 本交易支付时使用的所有优惠券信息 |
pagePay
电脑网站支付
options 参数
| 名称 | 类型 | 必填 | 描述 |
|---|
| totalAmount | string | 是 | 订单总金额,单位为元,精确到小数点后两位,取值范围0.01,100000000 |
| subject | string | 是 | 订单标题 |
| outTradeNo | string | 否 | 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复。默认为当前时间戳 + 6位随机数。 |
| body | string | 否 | 订单描述。 |
| goodsDetail | string | 否 | 订单包含的商品列表信息,Json格式,详见商品明细说明。 | {"show_url":"https://www.alipay.com"} |
| passbackParams | string | 否 | 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝。 |
| extendParams | string | 否 | 业务扩展参数,详见业务扩展参数说明。 {"sys_service_provider_id":"2088511833207846"} |
| goodsType | string | 否 | 商品主类型:0—虚拟类商品,1—实物类商品(默认) 注:虚拟类商品不支持使用花呗渠道 |
| timeoutExpress | string | 否 | 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。该参数在请求到支付宝时开始计时。 |
| enablePayChannels | string | 否 | 可用渠道,用户只能在指定渠道范围内支付当有多个渠道时用“,”分隔注:与disablePayChannels互斥 |
| disablePayChannels | string | 否 | 禁用渠道,用户不可用指定渠道支付当有多个渠道时用“,”分隔注:与enable_pay_channels互斥 |
| authToken | string | 否 | 针对用户授权接口,获取用户相关数据时,用于标识用户授权关系 |
| qrPayMode | string | 否 | PC扫码支付的方式,支持前置模式和跳转模式。前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以 iframe 方式请求支付宝页面。具体分为以下几种:0:订单码-简约前置模式,对应 iframe 宽度不能小于600px,高度不能小于300px;1:订单码-前置模式,对应iframe 宽度不能小于 300px,高度不能小于600px;3:订单码-迷你前置模式,对应 iframe 宽度不能小于 75px,高度不能小于75px;4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。2:订单码-跳转模式 |
| qrcodeWidth | string | 否 | 商户自定义二维码宽度 注:qr_pay_mode=4时该参数生效 |
商品明细说明
| 名称 | 类型 | 最大长度 | 必填 | 描述 |
|---|
| show_url | string | 400 | 否 | 商品的展示地址。 |
业务扩展参数说明
| 名称 | 类型 | 最大长度 | 必填 | 描述 |
|---|
| sys_service_provider_id | string | 64 | 否 | 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID |
可用渠道
| 渠道名称 | 说明 |
|---|
| balance | 余额 |
| moneyFund | 余额宝 |
| coupon | 红包 |
| pcredit | 花呗 |
| pcreditpayInstallment | 花呗分期 |
| creditCard | 信用卡 |
| creditCardExpress | 信用卡快捷 |
| creditCardCartoon | 信用卡卡通 |
| credit_group | 信用支付类型(包含信用卡卡通、信用卡快捷、花呗、花呗分期) |
| debitCardExpress | 借记卡快捷 |
| mcard | 商户预存卡 |
| pcard | 个人预存卡 |
| promotion | 优惠(包含实时优惠+商户优惠) |
| voucher | 营销券 |
| point | 积分 |
| mdiscount | 商户优惠 |
| bankPay | 网银 |
页面回跳参数
对于PC网站支付的交易,在用户支付完成之后,支付宝会根据API中商户传入的return_url参数,通过GET请求的形式将部分支付结果参数通知到商户系统。
公共参数
| 名称 | 类型 | 最大长度 | 必填 | 描述 | 示例 |
|---|
| app_id | String | 是 | 32 | 支付宝分配给开发者的应用ID | 2016040501024706 |
| method | String | 是 | 128 | 接口名称 | alipay.trade.page.pay.return |
| sign_type | String | 是 | 10 | 签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
| sign | String | 是 | 256 | 支付宝对本次支付结果的签名,开发者必须使用支付宝公钥验证签名 | 详见示例 |
| charset | String | 是 | 10 | 编码格式,如utf-8,gbk,gb2312等 | utf-8 |
| timestamp | String | 是 | 19 | 前台回跳的时间,格式"yyyy-MM-dd HH:mm:ss" | 2016-08-11 19:36:01 |
| version | String | 是 | 3 | 调用的接口版本,固定为:1.0 | 1.0 |
| auth_app_id | String | 是 | 32 | 授权方的appid 注:由于本接口暂不开放第三方应用授权,因此auth_app_id=app_id | 2016040501024706 |
业务参数
| 名称 | 类型 | 最大长度 | 必填 | 描述 | 示例 |
|---|
| out_trade_no | String | 是 | 64 | 商户网站唯一订单号 | 70501111111S001111119 |
| trade_no | String | 是 | 64 | 该交易在支付宝系统中的交易流水号。最长64位。 | 2016081121001004630200142207 |
| total_amount | Price | 是 | 9 | 该笔订单的资金总额,单位为RMB-Yuan。取值范围为0.01,100000000.00,精确到小数点后两位。 | 9.00 |
| seller_id | String | 是 | 16 | 收款支付宝账号对应的支付宝唯一用户号。 以2088开头的纯16位数字 | 2088111111116894 |
页面回跳示例
https://m.alipay.com/GkSL?total_amount=0.10×tamp=2016-11-02+18%3A34%3A19&sign=G3WI0czviMAOzS5t0fYaDgK32sGpjkkXYVFTpYMtgX8JaXLiGiUTO%2F2IHogcCFT96jBCLZ6IsNzd%2BmxkB%2FRuwG%2F7naQk1qReuORMkrB5cpBf9U40bIUoCmSNqtANsTE2UPV7GKegYG2RqoCRScTmeFAFHj5L7zsM%2BLuYb9mqN3g%3D&trade_no=2016110221001004330228438026&sign_type=RSA2&auth_app_id=2014073000007292&charset=UTF-8&seller_id=2088411964605312&method=alipay.trade.page.pay.return&app_id=2014073000007292&out_trade_no=20150g320g010101001&version=1.0
verify
验签接口。
参数
| 名称 | 类型 | 必填 | 描述 |
|---|
| options | object or string | 是 | 支付宝 POST 到notify_url的主体数据。格式是application/x-www-form-urlencoded。可以直接传入或格式化成object后传入。 |
返回值
返回true或false。