贝宝 Braintree 订阅付款

Posted

技术标签:

【中文标题】贝宝 Braintree 订阅付款【英文标题】:Paypal Braintree Subscription Payments 【发布时间】:2018-05-07 01:56:14 【问题描述】:

我在任何地方都找不到如何通过 Braintree 为 paypal 订阅做 javascript 代码。这是我目前拥有的代码,至少可以让我进入单笔交易金额的结账部分。但我想知道如何实现每月重复发生的金额。让我们说每月 1.99,直到它被取消。我错过了什么?

Java 代码

@Path("/braintree")
public class TestBraintree 
    private static BraintreeGateway gateway = new BraintreeGateway(
            Environment.SANDBOX,
            "myMerchantId",
            "myPublicKey",
            "myPrivateKey"
    );

    @GET
    @Path("/client_token")
    public String getMsg() 
        return gateway.clientToken().generate();
    

    @POST
    @Consumes("application/json")
    @Path("/checkout")
    public String getCheckoutMessage(String json) 
//        String nonceFromTheClient = request .queryParams("payment_method_nonce");
        System.out.println();
        return "";
    

html 代码

<head>
    <script src="https://www.paypalobjects.com/api/checkout.js"></script>
    <script src="https://js.braintreegateway.com/web/3.11.0/js/client.min.js"></script>
    <script src="https://js.braintreegateway.com/web/3.11.0/js/paypal-checkout.min.js"></script>
</head>
<body>
     <div id="paypal-button-container"></div>
       var client_token = document.getElementById('clientId').value;
                <script>
                    paypal.Button.render(
                        braintree: braintree,
                        client: 
                            production: client_token,
                            sandbox: client_token,
                        ,
                        env: 'sandbox', // Or 'sandbox'
                        commit: true, // This will add the transaction amount to the PayPal button

                        payment: function (data, actions) 
                            return actions.braintree.create(
                                flow: 'checkout', // Required
                                amount: 10.00, // Required
                                currency: 'USD', // Required
                                enableShippingAddress: true,
                                shippingAddressEditable: false,
                                shippingAddressOverride: 
                                    recipientName: 'Scruff McGruff',
                                    line1: '1234 Main St.',
                                    line2: 'Unit 1',
                                    city: 'Chicago',
                                    countryCode: 'US',
                                    postalCode: '60652',
                                    state: 'IL',
                                    phone: '123.456.7890'
                                
                            );
                        ,

                        onAuthorize: function (payload) 
                            // Submit `payload.nonce` to your server.
                        ,
                    , '#paypal-button-container');
                </script>
</body>

【问题讨论】:

【参考方案1】:

您似乎正在使用带有 PayPal 的 Checkout,它旨在用于一次性付款。如果您想存储客户的付款信息以创建订阅,则需要使用PayPal vaulted payment flow:

// Set up PayPal with the checkout.js library
paypal.Button.render(
  env: 'production', // or 'sandbox'

  payment: function () 
    return paypalCheckoutInstance.createPayment(
      flow: 'vault',
      billingAgreementDescription: 'Your agreement description',
      enableShippingAddress: true,
      shippingAddressEditable: false,
      shippingAddressOverride: 
        recipientName: 'Scruff McGruff',
        line1: '1234 Main St.',
        line2: 'Unit 1',
        city: 'Chicago',
        countryCode: 'US',
        postalCode: '60652',
        state: 'IL',
        phone: '123.456.7890'
      
    );
  ,

  onAuthorize: function (data, actions) 
    return paypalCheckoutInstance.tokenizePayment(data)
      .then(function (payload) 
        // Submit `payload.nonce` to your server.
      );
  

您的客户完成结帐后,您可以将生成的payload.nonce 提交到您的服务器并在customer create call 中使用它。然后,您可以使用 subscription create call 在新保管的 PayPal 付款方式上设置定期订阅。

【讨论】:

奇怪....所以你不需要价格吗?你只是说嘿这是你和供应商之间的协议吗?然后提供商可以按月发送? @Justin 是的,使用保管支付流程时不需要金额。完整的选项列表是available here。您可以在plan中指定订阅价格。 谢谢!这很有帮助,同时又超级简单,不知道我是怎么错过的。我想我只是对它如何在我的脑海中发挥作用有了这个想法,我无法忽略它。我给了+50 :)。谢谢!

以上是关于贝宝 Braintree 订阅付款的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有商户账户的情况下使用 Braintree 进行买卖双方的付款?

Braintree 拆分支付贝宝

贝宝与 Braintree Drop-In

Braintree 自定义贝宝按钮

在 Braintree 付款中搜索客户的有效订阅

在Braintree付款中搜索客户的有效订阅