微信小程序版

注:
- 某些平台不能提交简单demo,故补充了一些其他功能;hello uni-app示例代码可从github获取

实际运行效果如下:

uniapp小程序ios打开外部链接 uniapp使用微信小程序api_微信小程序

uni.requestPayment(OBJECT)

支付

uni.requestPayment是一个统一各平台的客户端支付API,不管是在某家小程序还是在App中,客户端均使用本API调用支付。

本API运行在各端时,会自动转换为各端的原生支付调用API。

注意支付不仅仅需要客户端的开发,还需要服务端开发。虽然客户端API统一了,但各平台的支付申请开通、配置回填仍然需要看各个平台本身的支付文档。

比如微信有App支付、小程序支付、H5支付等不同的申请入口和使用流程,对应到uni-app,在App端要申请微信的App支付,而小程序端则申请微信的小程序支付。

如果服务端使用uniCloud,那么官方提供了uniPay云端统一支付服务,把App、微信小程序、支付宝小程序里的服务端支付开发进行了统一的封装。

前端统一的uni.requestPayment和云端统一的uniPay搭配,可以极大提升支付业务的开发效率,强烈推荐给开发者使用。uniPay的文档另见:https://uniapp.dcloud.io/uniCloud/unipay

平台差异说明

App

H5

微信小程序

支付宝小程序

百度小程序

字节跳动小程序

QQ小程序

说明

OBJECT 参数说明

参数名

类型

必填

说明

平台差异说明

provider

String

服务提供商,通过 uni.getProvider 获取。


orderInfo

String/Object

订单数据,注意事项

App、支付宝小程序、百度小程序、字节跳动小程序

timeStamp

String

微信小程序必填

时间戳从1970年1月1日至今的秒数,即当前的时间。

微信小程序

nonceStr

String

微信小程序必填

随机字符串,长度为32个字符以下。

微信小程序

package

String

微信小程序必填

统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=xx。

微信小程序

signType

String

微信小程序必填

签名算法,暂支持 MD5。

微信小程序

paySign

String

微信小程序必填

签名,具体签名方案参见 微信小程序支付文档

微信小程序

bannedChannels

Array<String>

需要隐藏的支付方式,详见 百度小程序支付文档

百度小程序

service

Number

字节跳动小程序必填

固定值:1(拉起小程序收银台)开发者如果不希望使用字节跳动小程序收银台,service设置为3/4时,可以直接拉起微信/支付宝进行支付:service=3: 微信API支付,不拉起小程序收银台;service=4: 支付宝API支付,不拉起小程序收银台。其中service=3、4,仅在1.35.0.1+基础库(头条743+)支持

字节跳动小程序

_debug

Number

仅限调试用,上线前去掉该参数。_debug=1时,微信支付期间可以看到中间报错信息,方便调试

字节跳动小程序

getOrderStatus

Function

字节跳动小程序必填

商户前端实现的查询支付订单状态方法(该方法需要返回个Promise对象)。 service=3、4时不需要传。

字节跳动小程序

success

Function

接口调用成功的回调


fail

Function

接口调用失败的回调函数


complete

Function

接口调用结束的回调函数(调用成功、失败都会执行)


注意事项

  • APP端,如果你的应用在用户完成支付后;立即给支付的用户push消息通知。会与前端支付回调相互冲突,请延迟执行推送。
  • 字节跳动小程序支付接口调整使用时请注意发起头条支付

orderInfo 注意事项

  1. 百度小程序的 orderInfo 为 Object 类型,详细的数据结构,参考:百度收银台支付
  2. 支付宝小程序的 orderInfo(支付宝的规范为 tradeNO) 为 String 类型,表示支付宝交易号。
  3. 字节跳动小程序的 orderInfo 为 Object 类型,详见:发起头条支付
  4. 由于头条新版支付接口要求版本较高,在不支持新版支付接口的情况下仍会对应旧版支付接口,此时 orderInfo 对应字节跳动小程序 data, 详见:头条支付旧版接口。用户可以使用 tt.pay 判断是否支持新版接口。另外需要注意字节跳动小程序在1.35.0+版本基础库支持了 canIUse ,在1.19.4+版本基础库支持了新版支付接口 tt.pay ,所以应避免使用 canIUse 判断是否为新版接口。
  5. App端,支付宝支付 orderInfo 为 String 类型。
  6. App端,微信支付 orderInfo 为 Object 类型。
  7. App端,苹果应用内支付 orderInfo 为Object 类型,{productid: 'productid'}。

具体可参考微信官方文档: 移动应用开发

注意微信的App支付、小程序支付、H5支付是不同的体系。微信小程序支付在 微信商户平台 申请支付时,选择公众号支付;普通浏览器里也可以调起微信进行支付,这个在微信叫做H5支付,此功能未开放给普通开发者,需向微信单独申请,详见

manifest.json里配置相关参数

  1. 在manifest.json - App模块权限选择 中勾选 payment(支付)
  2. 在 manifest.json - App SDK配置 中,勾选需要的支付平台,目前有微信支付、支付宝支付、苹果应用内支付(IAP),其中微信支付需要填写从微信开放平台获取的AppID 

uniapp小程序ios打开外部链接 uniapp使用微信小程序api_微信小程序_02

  1. 这些配置需要打包生效,真机运行仍然是HBuilder基座的设置,可使用自定义基座调试。离线打包请参考离线打包文档在原生工程中配置。
  2. 配置并打包后,通过uni.getProvider可以得到配置的结果列表,注意这里返回的是manifest配置的,与手机端是否安装微信、支付宝无关。

如果手机端未安装支付宝,调用时会启动支付宝的wap页面登录,如果已安装相应客户端,会启动其客户端登录。

uni-app里开发

示例

微信小程序支付

// 仅作为示例,非真实参数信息。
uni.requestPayment({
    provider: 'wxpay',
    timeStamp: String(Date.now()),
    nonceStr: 'A1B2C3D4E5',
package: 'prepay_id=wx20180101abcdefg',
    signType: 'MD5',
    paySign: '',
    success: function (res) {
        console.log('success:' + JSON.stringify(res));
},
    fail: function (err) {
        console.log('fail:' + JSON.stringify(err));
}});