提交 68e03510 编写于 作者: DCloud-yyl's avatar DCloud-yyl

update app-payment-paypal.md

上级 52d05a16
#### 开通 ### 开通
* 登录[paypal开发者中心](https://developer.paypal.com/developer/applications) - 登录[paypal开发者中心](https://developer.paypal.com/developer/applications),创建应用
* 创建应用,获取ClientID - 在 My Apps 中点击已创建的应用,获取ClientID(支付订单中需要)
* 添加returnURL等相关配置 - 添加return URL等相关配置,设置return URL时需注意:
+ 格式为“包名+://paypalpay”,必需全小写
+ 可添加多个return URL分别给Android和iOS平台使用
更多信息详见[paypal开通文档](https://uniapp.dcloud.io/app-payment-paypal-open) 更多信息详见 [申请开通Paypal操作指南](https://uniapp.dcloud.io/app-payment-paypal-open)
#### 配置
### 配置
在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“paypal支付”项并配置相关参数 在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“paypal支付”项并配置相关参数
![](https://partner-dcloud-native.oss-cn-hangzhou.aliyuncs.com/images/uniapp/payment/paypal_setup_manifest_info.png) ![](https://partner-dcloud-native.oss-cn-hangzhou.aliyuncs.com/images/uniapp/payment/paypal_setup_manifest_info.png)
配置说明:returnURL必须为paypal开发者中心配置的returnURL,否则无法调起支付 配置说明:returnURL必须为paypal开发者中心配置的returnURL,否则无法调起支付
**参数说明**
- returnURL_android
Android平台使用的return URL,必须与paypal开发者中心配置的值一致
- returnURL_ios
iOS平台使用的return URL,必须与paypal开发者中心配置的值一致
> 提示:returnURL_android 和 returnURL_ios 可以相同,不相同时需要paypal开发者中心添加多个return URL
#### 服务器生成订单 #### 服务器生成订单
通过服务器生成支付订单并获取orderId(服务器获取订单信息详见[paypal API](https://developer.paypal.com/docs/api/orders/v2/)) 在 App 端调用支付前,需在业务服务器生成支付订单并获取`orderId`,详情可参考paypal官方文档:[Create Order](https://developer.paypal.com/api/orders/v2/#orders_create)
#### 应用内发起支付 #### 应用内发起支付
订单信息参数如下
| 参数名称 | 参数说明 | 必须 |
|-------------|-------|-----|
| clientId | 客户端id(获取方式详见paypal开通文档) | 是 |
| orderId | 订单id | 是 |
| environment | 运行环境(sandbox/live) |是 |
| userAction | 按钮样式(paynow/continue) | 否 |
| currency | [币种](https://developer.paypal.com/docs/api/reference/currency-codes/) (必须大写) | 否 |
* uni-app项目示例(provider填写paypal) - uni-app项目
调用 [uni.requestPayment(OBJECT)](https://uniapp.dcloud.io/api/plugins/payment?id=requestpayment) 发起支付,OBJECT参数中provider属性值固定为`paypal`、orderInfo属性值为订单对象
- 5+ App项目
调用 [plus.payment.request(channel, orderInfo, successCB, errorCB)](https://www.html5plus.org/doc/zh_cn/payment.html#plus.payment.request) 发起支付, channel参数为paypal支付对象,orderInfo参数为订单对象
##### 订单对象参数说明
Object对象类型
| 属性 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| clientId | String | 是 | 客户端id,在paypal开发者中心创建应用时可获取 |
| currency | String | 否 | 币种,必须大写,取值参考paypal官方文档[Currency Codes](https://developer.paypal.com/docs/api/reference/currency-codes/) |
| environment | String | 是 | 运行环境,可取值sandbox/live,sandbox表示沙盒环境(用于开发测试),live表示线上环境(正式发布) |
| orderId | String | 是 | 订单id,服务器生成支付订单时可获取 |
| userAction | String | 否 | 按钮样式,可取值paynow/continue |
#### 示例代码
- uni-app项目
``` js ``` js
//订单对象,从服务器获取
var orderInfo = {
"clientId": "clientId from paypal", //客户端id
"orderId": "orderId from server", //订单id
"userAction": "continue", // paynow/continue
"currency":"USD", // 币种
"environment":"sandbox", //运行环境 sandbox/live
};
uni.getProvider({ uni.getProvider({
service: 'payment', service: 'payment',
success: function (res) { success: function (res) {
console.log(res.provider) console.log(res.provider)
if (~res.provider.indexOf('paypal')) { if (~res.provider.indexOf('paypal')) {
uni.requestPayment({ uni.requestPayment({
"provider": "paypal", "provider": "paypal",
"orderInfo": { "orderInfo": orderInfo,
"clientId": clientId, //客户端id success: function (res) {
"orderId": orderId,//订单id var rawdata = JSON.parse(res.rawdata);
"userAction":"continue",// paynow/continue console.log("orderId:" + rawdata.orderId);
"currency":"USD",//币种 },
"environment":"sandbox",//运行环境 sandbox/live fail: function (err) {
}, console.log('fail:' + JSON.stringify(err));
success: function (res) { }
var rawdata = JSON.parse(res.rawdata); });
console.log("orderId:" + rawdata.orderId); }
}, }
fail: function (err) {
console.log('fail:' + JSON.stringify(err));
}
})
}
}
}); });
``` ```
* 5+App项目示例
``` js - 5+ App项目
//获取支付渠道 ``` js
var paypalSev = null; //订单对象,从服务器获取
plus.payment.getChannels(function(channels) { var orderInfo = {
for (var i in channels) { "clientId": "clientId from paypal", //客户端id
"orderId": "orderId from server", //订单id
"userAction":"continue", // paynow/continue
"currency":"USD", // 币种
"environment":"sandbox", //运行环境 sandbox/live
};
//获取支付渠道
var paypalSev = null;
plus.payment.getChannels(function(channels){
for (var i in channels) {
var channel = channels[i]; var channel = channels[i];
if (channel.id === 'paypal') { if (channel.id === 'paypal') {
paypalSev = channel; paypalSev = channel;
} }
} }
}, function(e) {
console.log("获取支付渠道失败:" + e.message);
});
//发起支付 //发起支付
var statement = { plus.payment.request(paypalSev, orderInfo, function(result) {
"clientId": clientId, //客户端id var rawdata = JSON.parse(result.rawdata);
"orderId": orderId,//订单id console.log("支付成功");
"userAction":"continue",// paynow/continue
"currency":"USD",//币种
"environment":"sandbox",//运行环境 sandbox/live
};
plus.payment.request(this.paypalSev, statement, function(result) {
var rawdata = JSON.parse(result.rawdata);
console.log("orderId:" + rawdata.orderId);
}, function(e) { }, function(e) {
console.log("支付失败:" + e.message); console.log("支付失败:" + JSON.stringify(e));
}); });
}, function(e){
console.log("获取支付渠道失败:" + JSON.stringify(e));
});
``` ```
#### 服务器授权(完成授权后才会扣款) ### 服务器授权
应用发起支付完成后,返回订单id,服务器捕获或授权订单 在App端发起支付完成后,返回订单id,并没有完成支付操作,需要在服务器授权或捕获订单完成扣款。
[详见paypal API](https://developer.paypal.com/docs/api/orders/v2/) - 授权订单付款参考paypal官方文档:[Authorize payment for order](https://developer.paypal.com/api/orders/v2/#orders_authorize)
- 捕获订单付款参考paypal官方文档:[Capture payment for order](https://developer.paypal.com/api/orders/v2/#orders_capture)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册