Paypal 智能按钮订阅状态

Posted

技术标签:

【中文标题】Paypal 智能按钮订阅状态【英文标题】:Paypal Smart Button Subscription Status 【发布时间】:2021-05-05 06:18:37 【问题描述】:

我是使用 Paypal Smart 按钮设置订阅的新手。我创建了一个从 Paypal 帐户订阅的 Paypal 智能按钮,并将其粘贴到我的 html 中。已添加我的 OnInit 和 Onclick 函数以在用户点击之前进行验证。

在用户浏览“同意并订阅”页面后,我正在检查订阅是否处于活动状态。 (这是在“notify.php”中完成的,我使用 paypal REST api 调用并获取订阅状态)

<div id="paypal-button-container"></div>
<script src="https://www.paypal.com/sdk/js?client-id=XXXXXXXXXXXXXXXX&vault=true&intent=subscription" data-sdk-integration-source="button-factory"></script>
                    <script>
                        paypal.Buttons(

                            style: 
                              shape: 'pill',
                              color: 'gold',
                              layout: 'vertical',
                              label: 'subscribe'
                            ,

                            // onInit is called when the button first renders
                            onInit: function(data, actions) 

                              // Disable the buttons
                              actions.disable();

                              // Listen for changes to the radio
                                var items = document.getElementsByName("settings");
                                [].forEach.call(items, function (item) 
                                    item.addEventListener("change", function () 
                                                  // Enable or disable the button when it is checked or unchecked
                                        if (event.target.checked) 
                                            actions.enable();
                                         else 
                                            actions.disable();
                                        
                                    );
                                );

                             
                            ,

                            // onClick is called when the button is clicked
                            onClick: function() 
                                var radios=document.querySelectorAll('input[type="radio"]:checked').length;
                              // Show a validation error if the checkbox is not checked
                              if (radios == 0) 
                                document.querySelector('#error').classList.remove('hidden');
                              
                            
                                
                            ,
                            
                            createSubscription: function(data, actions) 
                                return actions.subscription.create(
                                  'plan_id': 'P-XXXXXXXXXXXX'
                                );
                            ,
                            
                            onApprove: function(data, actions) 
                                alert(data.subscriptionID);
                                alert(data.SubscriptionDate);

                                // You must return a promise from onClick to do async validation
                                  return fetch("notify.php", 
                                    method: 'post',
                                    headers: 
                                      'content-type': 'application/json'
                                    ,
                                    body:JSON.stringify(
                                        subscriptionID:data.subscriptionID
                                    )
                                    
                                  ).then(response => 
                                        
                                         return response.text();
                                    )
                                    .then(data => 
                                         
                                          console.log(data);
                                          if(data == "ACTIVE")

                                            location.href = "validate.html?data=ACTIVE";
                                          
                                      
                                         
                                    )
                                    .catch(error => console.log(error)
                                        );
                                  

                      ).render('#paypal-button-container');
                    </script>
                </div>

第一季度。当订阅状态返回“ACTIVE”时,请有人确认一下,这意味着用户已付款并已成功订阅。因此我可以在我的数据库中更新这些信息。 或者我是否需要在 OnApprove 中捕获交易,如下所示:

 onApprove: function (data, actions) 
// Capture the transaction funds
          return actions.order.capture().then(function () 

第二季度。这种在我的网页上集成按钮的方式是否安全?

更新: (所有这些都是针对我为客户提供服务的个人网页。我想为他们激活订阅。) 我从我的 Paypal 帐户制定了订阅计划。在我的网页上添加了生成的代码,现在我想检查用户/客户是否已成功支付/订阅我的服务,以便我可以为他们启用服务并更新他们在我的数据库中的信息。

【问题讨论】:

这能回答你的问题吗? PayPal Smart Subscribe server side @PrestonPHX:不,我已经检查过了。我没有使用 API 创建订阅计划。我只想检查订阅是否处于活动状态,以便我可以在我的数据库中输入详细信息。我想知道贝宝是否激活了订阅,这是否确认用户已付费? 计划应事先创建,是否通过API无关紧要。订阅应通过 API 创建,因此您可以从服务器激活它。然后你知道它是活跃的。 javascript 代码不应触发写入数据库的事件,应与 PayPal API 通信。 我将信息(通过 onApprove 收到的订阅 ID)从 JS 传递到 notify.php,在其中我通过 REST 调用订阅 API 并检查订阅状态。如果处于活动状态,那么只有我更新数据库 然后订阅可能会在没有通知您的服务器的情况下激活,因为通知来自客户端 JS。正如我所说,您的服务器应该调用 API 来激活订阅。有关详细信息,请参阅上面的链接。 【参考方案1】:

有效的 PayPal 订阅并不表示第一笔付款已经完成。

订阅按批处理计划计费。要在付款成功时收到通知,请订阅 Webhook 事件PAYMENT.SALE.COMPLETED

【讨论】:

所以这意味着在收到 webhook 事件 PAYMENT.SALE.COMPLETED 之后,我应该更新我的数据库中的信息并为我的客户启用服务。

以上是关于Paypal 智能按钮订阅状态的主要内容,如果未能解决你的问题,请参考以下文章

使用 paypal.FUNDING.CARD 按钮 update_client_config_error 的 PayPal 智能按钮(订阅)

尝试从智能按钮创建订阅时出错

贝宝 - 订阅按钮

PayPal 订阅 - 缺少 PDT 发票

Paypal 订阅按钮和详细信息

特定订阅标识符的 PayPal 取消订阅按钮