request-payment.md 5.3 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3
## uni.requestPayment(options) @requestpayment

<!-- UTSAPIJSON.requestPayment.description -->
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
4

D
DCloud_LXH 已提交
5 6
<!-- UTSAPIJSON.requestPayment.compatibility -->

zhaofengliang920817's avatar
zhaofengliang920817 已提交
7 8 9 10 11 12 13 14 15 16 17
uni.requestPayment是一个统一各平台的客户端支付API,客户端均使用本API调用支付。

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

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

比如微信有App支付的申请入口和使用流程,对应到uni-app,在App端要申请微信的App支付。

如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),那么官方提供了[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)云端统一支付服务,把App、微信小程序、支付宝小程序里的服务端支付开发进行了统一的封装。

前端统一的`uni.requestPayment`和云端统一的`uniPay`搭配,可以极大提升支付业务的开发效率,强烈推荐给开发者使用。`uniPay`的文档另见:[https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
18

D
DCloud_LXH 已提交
19 20
<!-- UTSAPIJSON.requestPayment.param -->

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
21 22
### orderInfo参数说明

D
DCloud_LXH 已提交
23
 - 支付宝\
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
24
  App 支付请求参数字符串,主要包含商家的订单信息,key=value 形式,以 & 连接。示例
D
DCloud_LXH 已提交
25 26
  ```
  app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
27 28 29 30 31
  22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%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%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=R
  SA2&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552
  EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJd
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
32 33
  hIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D<br>
  ```
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
34
  [更多详情参考[支付宝官方文档](https://opendocs.alipay.com/open/204/105296?pathHash=22ed0058&ref=api)]
D
DCloud_LXH 已提交
35
 -  微信\
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
36
  App 支付请求参数字符串,需要打自定义基座。示例
D
DCloud_LXH 已提交
37 38 39 40 41 42 43 44 45 46
  ```json
  {
   "appid":"wxd569c7238830733b",
   "noncestr":"6N47VnR42bqIm4xq",
   "package":"Sign=WXPay",
   "partnerid":"1230636401",
   "prepayid":"wx26174750316675ac54b89c224eb3250000",
   "timestamp":1711446470,
   "sign":"EE987459B9CFF6462462147130110D31"
  }
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
47
  ```
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
48 49
  [更多详情参考[微信官方文档]( https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1)]

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
50

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
51

D
DCloud_LXH 已提交
52 53
<!-- UTSAPIJSON.requestPayment.returnValue -->

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
54 55
<!-- UTSAPIJSON.requestPayment.tutorial -->

DCloud_Heavensoft's avatar
DCloud_Heavensoft 已提交
56 57
### cause支付sdk错误码汇总

D
DCloud_LXH 已提交
58
#### 支付宝支付
DCloud_Heavensoft's avatar
DCloud_Heavensoft 已提交
59 60 61 62 63 64 65 66 67 68 69
| 支付宝错误码 | 错误信息 |
|---|---|
| -9000 | 订单支付成功 |
| -8000 | 正在处理中,支付结果未知(有可能已经支付成功),请查询商家订单列表中订单的支付状态 |
| -4000 | 订单支付失败 |
| -5000 | 重复请求 |
| -6001 | 用户中途取消 |
| -6002 | 网络连接出错 |
| -6004 | 支付结果未知(有可能已经支付成功),请查询商家订单列表中订单的支付状态 |
|  其它  | 其它支付错误 |

zhaofengliang920817's avatar
zhaofengliang920817 已提交
70
### 注意
W
wanganxp 已提交
71
- App平台开发支付宝支付,无需自定义基座,真机运行可直接开发
zhaofengliang920817's avatar
zhaofengliang920817 已提交
72
- 判断微信是否安装可以通过`uni.getProvider`的方式,详见[uni.getProvider](https://doc.dcloud.net.cn/uni-app-x/api/get-provider.html#getprovider)
D
DCloud_LXH 已提交
73 74

```ts
zhaofengliang920817's avatar
zhaofengliang920817 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
   uni.getProvider({
      service: "payment",
      success: (e) => {
         const provider = e.providers.find((item): boolean => {
            return item.id == 'wxpay'
         })

         if (provider?.isAppExist == false) {
            console.log('WeChat 没有安装')
         } else {
            console.log('WeChat 已安装')
         }
      },
      fail: (e) => {
         console.log("获取支付通道失败:", e);
      }
   })
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
92
```
D
DCloud_LXH 已提交
93

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
94
- **app需要在根目录manifest.json文件中配置`uni-payment`节点,详见 [https://doc.dcloud.net.cn/uni-app-x/collocation/manifest-modules.html#uni-payment模块配置](https://doc.dcloud.net.cn/uni-app-x/collocation/manifest-modules.html#uni-payment)**
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
95
- app-android平台微信支付需要4.11及以上版本
zhaofengliang920817's avatar
zhaofengliang920817 已提交
96
- app-ios平台微信支付需要4.18及以上版本
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
97

W
wanganxp 已提交
98

D
DCloud_LXH 已提交
99
<!-- UTSAPIJSON.requestPayment.example -->
D
DCloud_LXH 已提交
100

D
DCloud_LXH 已提交
101 102
<!-- UTSAPIJSON.general_type.name -->

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
103
<!-- UTSAPIJSON.general_type.param -->
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

## 自定义支付provider

第一步,在interface.uts 中定义接口,继承UniPaymentProvider,代码如下

```ts
export interface UniPaymentAlipayProvider extends UniPaymentProvider{}
```

第二步,在app-android或者app-ios的index.uts中实现接口,代码如下

```ts
import { UniPaymentAlipayProvider } from '../interface.uts'
export class UniPaymentAlipayProviderImpl implements UniPaymentAlipayProvider{
	override id : String = "alipay"
	override description : String = "Alipay"
	override isAppExist : boolean | null = null
	
	constructor(){}

	override requestPayment(options : RequestPaymentOptions) {
		//todo 具体逻辑
	}
}
```

第三步,在manifest.json中配置

```ts
  "app": {
    "distribute": {
      /* android打包配置 */
      "modules": {
        "uni-payment":{
          "alipay":{}
        }
      }
    }
  }
```

第四步,打自定义基座