# 开通

  • 登录paypal开发者中心,创建应用
  • 在 My Apps 中点击已创建的应用,获取ClientID(支付订单中需要)
  • 添加return URL等相关配置,设置return URL时需注意:
    • 格式为“包名+://paypalpay”,必需全小写
    • 可添加多个return URL分别给Android和iOS平台使用

更多信息详见 申请开通Paypal操作指南

注意

  • iOS系统仅支持iOS13.0及以上版本

# 配置

在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“paypal支付”项并配置相关参数

参数说明

  • returnURL_android
    Android平台使用的return URL,必须与paypal开发者中心配置的值一致,否则无法调起支付
  • returnURL_ios
    iOS平台使用的return URL,必须与paypal开发者中心配置的值一致,否则无法调起支付

提示:returnURL_android 和 returnURL_ios 可以相同,不相同时需要paypal开发者中心添加多个return URL

# 服务器生成订单

在 App 端调用支付前,需在业务服务器生成支付订单并获取orderId,详情可参考paypal官方文档:Create Order

# 应用内发起支付

# 订单对象参数说明

Object对象类型

属性 类型 必填 说明
clientId String 客户端id,在paypal开发者中心创建应用时可获取
currency String 币种,必须大写,取值参考paypal官方文档Currency Codes
environment String 运行环境,可取值sandbox/live,sandbox表示沙盒环境(用于开发测试),live表示线上环境(正式发布)
orderId String 订单id,服务器生成支付订单时可获取
userAction String 按钮样式,可取值paynow/continue

# 示例代码

  • uni-app项目
//订单对象,从服务器获取
var orderInfo = {
  "clientId": "clientId from paypal",     //客户端id
  "orderId": "orderId from server",       //订单id
  "userAction": "continue",  //  paynow/continue
  "currency":"USD",          // 币种  
  "environment":"sandbox",   //运行环境 sandbox/live
};
uni.getProvider({
    service: 'payment',
    success: function (res) {
        console.log(res.provider)
        if (~res.provider.indexOf('paypal')) {
            uni.requestPayment({
                "provider": "paypal", 
                "orderInfo": orderInfo,
                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项目
//订单对象,从服务器获取
var orderInfo = {
  "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];
        if (channel.id === 'paypal') {
            paypalSev = channel;
        }
    }
    //发起支付
    plus.payment.request(paypalSev, orderInfo, function(result) {
         var rawdata = JSON.parse(result.rawdata);
         console.log("支付成功");
    }, function(e) {
         console.log("支付失败:" + JSON.stringify(e));
    });
  }, function(e){
      console.log("获取支付渠道失败:" + JSON.stringify(e));
});

# 服务器授权

在App端发起支付完成后,返回订单id,并没有完成支付操作,需要在服务器授权或捕获订单完成扣款。

# 注意事项

  • Android端需要注意应用包名和return_url要小写