app-payment-alipay.md 5.2 KB
Newer Older
DCloud-yyl's avatar
DCloud-yyl 已提交
1 2 3 4 5 6 7
### 开通  
- 登录 [支付宝开放平台](https://open.alipay.com/),进入控制台页面
- [创建移动应用](https://opendocs.alipay.com/open/200/105310),填写应用信息并提交审核
- 在应用详情页面的`能力列表`中添加`APP支付`功能,详情参考[添加应用功能](https://opendocs.alipay.com/open/200/105310#%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E5%8A%9F%E8%83%BD)
- 进入开发设置完成加密方式、IP白名单等开发信息设置,详情参考[配置应用环境](https://opendocs.alipay.com/open/200/105310#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%8E%AF%E5%A2%83)
- 添加功能和配置密钥后(获取公钥、私钥,用于服务器生成订单),将应用提交审核,详情参考[上线应用](https://opendocs.alipay.com/open/200/golive/)
- 应用上线后,完成签约才能在生产环境使用支付功能,详情参考[签约功能](https://opendocs.alipay.com/open/200/105314/)
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
8

DCloud-yyl's avatar
DCloud-yyl 已提交
9 10 11 12 13
更多信息详见支付宝官方文档 [App 支付接入准备](https://opendocs.alipay.com/open/204/105297/)


### 配置  
打开项目的manifest.json文件,在“App模块配置”项的“Payment(支付)”下,勾选“支付宝支付”:
DCloud-yyl's avatar
DCloud-yyl 已提交
14
![](https://native-res.dcloud.net.cn/images/uniapp/payment/alipay_setup_manifest_info.png)
DCloud-yyl's avatar
DCloud-yyl 已提交
15

DCloud-yyl's avatar
DCloud-yyl 已提交
16 17 18
**注意**
- 支付宝支付没有绑定应用包名、签名信息,可以使用标准基座开发测试,正式发布前请提交云端打包并使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115)
- 本地离线打包参考[Android平台支付宝模块配置](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=%e6%94%af%e4%bb%98%e5%ae%9d)[iOS平台支付宝模块配置](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/iOSModuleConfig/pay?id=%e6%94%af%e4%bb%98%e5%ae%9d)
DCloud-yyl's avatar
DCloud-yyl 已提交
19

DCloud-yyl's avatar
DCloud-yyl 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

### 服务器生成订单  
在 App 端调用支付前,需在业务服务器生成支付订单,可参考:
- [生成支付订单示例(PHP)](https://github.com/dcloudio/H5P.Server/tree/master/payment/alipayrsa2)
- [老版本"移动快捷支付"示例代码(PHP)](https://github.com/dcloudio/H5P.Server/tree/master/payment/alipay)
- [生成支付订单示例(C#)](http://ask.dcloud.net.cn/article/197)

更多信息详见支付宝官方文档 [服务端接入流程](https://opendocs.alipay.com/open/204/01dcc0)


### 应用内发起支付  

- uni-app项目  
调用 [uni.requestPayment(OBJECT)](https://uniapp.dcloud.io/api/plugins/payment?id=requestpayment) 发起支付,OBJECT参数中provider属性值固定为`alipay`、orderInfo属性值为订单对象
- 5+ App项目  
调用 [plus.payment.request(channel, orderInfo, successCB, errorCB)](https://www.html5plus.org/doc/zh_cn/payment.html#plus.payment.request) 发起支付, channel参数为支付宝支付对象,orderInfo参数为订单对象


#### 订单对象说明  
支付宝支付订单对象为String类型,字符串数据格式为"application/x-www-form-urlencoded",即 key=value 形式,使用 & 符号连接。示例如下:
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
40 41 42
```
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.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=RSA2&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D
```
DCloud-yyl's avatar
DCloud-yyl 已提交
43 44 45 46 47 48

更多信息详见支付宝官方文档 [APP支付请求参数说明](https://opendocs.alipay.com/open/204/105465/)


#### 示例代码
- uni-app项目  
DCloud-yyl's avatar
DCloud-yyl 已提交
49
``` js
DCloud-yyl's avatar
DCloud-yyl 已提交
50
var orderInfo = '';  //从服务器获取的订单
DCloud-yyl's avatar
DCloud-yyl 已提交
51
uni.getProvider({
DCloud-yyl's avatar
DCloud-yyl 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
    service: 'payment',
    success: function (res) {
        console.log(res.provider)
        if (~res.provider.indexOf('alipay')) {
            uni.requestPayment({
                "provider": "alipay",   //固定值为"alipay"
                "orderInfo": orderInfo, //此处为服务器返回的订单信息字符串
                success: function (res) {
                    var rawdata = JSON.parse(res.rawdata);
                    console.log("支付成功");
                },
                fail: function (err) {
                    console.log('支付失败:' + JSON.stringify(err));
                }
            });
        }
    }
DCloud-yyl's avatar
DCloud-yyl 已提交
69 70
});
```
DCloud-yyl's avatar
DCloud-yyl 已提交
71 72

- 5+ App项目
DCloud-yyl's avatar
DCloud-yyl 已提交
73
``` js
DCloud-yyl's avatar
DCloud-yyl 已提交
74 75 76 77 78
var orderInfo = '';  //从服务器获取的订单
//获取支付宝支付对象
var alipaySev = null;  // 支付宝支付对象
plus.payment.getChannels(function(channels){
    for (var i in channels) {
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
79 80
        var channel = channels[i];
        if (channel.id === 'alipay') {
DCloud-yyl's avatar
DCloud-yyl 已提交
81
            alipaySev = channel;
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
82
        }
DCloud-yyl's avatar
DCloud-yyl 已提交
83
    }
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
84
    //发起支付
DCloud-yyl's avatar
DCloud-yyl 已提交
85
    plus.payment.request(alipaySev, orderInfo, function(result){
86 87
          var rawdata = JSON.parse(result.rawdata);
          console.log("支付成功");
DCloud-yyl's avatar
DCloud-yyl 已提交
88
      }, function(e){
89
          console.log("支付失败:" + JSON.stringify(e));
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
90
    });
DCloud-yyl's avatar
DCloud-yyl 已提交
91
  }, function(e){
92
      console.log("获取支付渠道失败:" + JSON.stringify(e));
DCloud-yyl's avatar
DCloud-yyl 已提交
93
});
DCloud-yyl's avatar
DCloud-yyl 已提交
94 95
```