与JavaScript提交PayPal按钮的间歇性500错误



我正在测试使用PHP动态创建的基本PayPal按钮表单,并在页面加载后短暂延迟后将JS提交给Sandbox。大约有一半的时间工作正常,大约一半的时间贝宝(PayPal(响应500个错误。当我遇到错误时,我可以返回浏览器,让其重新提交完全相同的形式,此时,它有时有时可以起作用,有时会出现错误。

任何想法都将不胜感激。这可能是某种饼干问题吗?我已经提交了贝宝的票 - 尚未回复。谢谢!

编辑:这是相关代码。这是一个Drupal 8站点,它是在自定义模块中使用多个步骤表单的API的自定义模块。buildForm()被称为(然后是validateForm()(,然后称为submitForm()。在这种情况下,流程开始在建立"步骤" 3之后。客户点击"付款",而submitForm()被称为。

public function buildForm(array $form, FormStateInterface $form_state) {
    ...
    //'step' 3
    ...
    //'step' 4 is just to redirect to PayPal
    elseif ($form_state->get('step') == 4) {
        //prints in main form content area
        $form['redirecting'] = array(
            '#type' => 'html_tag',
            '#tag' => 'div',
            '#value' => $this->t('Redirecting to PayPal...'),
        );
    }
    ...
}
public function submitForm(array &$form, FormStateInterface $form_state) {
    ...
    //called after 'step' 3
    //gets id of record just inserted into database
    $paypal_invoice = $query->execute()->fetchField();
    $paypal_item_name = '[name of item]';
    $paypal_amount = $form_state->getValue('amount');
    $token = bin2hex(openssl_random_pseudo_bytes(16));
    $paypal_html =
        '<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top" id="paypal_form">
            <input type="hidden" name="cmd" value="_xclick">
            <input type="hidden" name="business" value="______________">
            <input type="hidden" name="lc" value="US">
            <input type="hidden" name="invoice" value="' . $paypal_invoice . '">
            <input type="hidden" name="item_name" value="' . $paypal_item_name . '">
            <input type="hidden" name="amount" value="' . $paypal_amount . '">
            <input type="hidden" name="button_subtype" value="services">
            <input type="hidden" name="no_note" value="1">
            <input type="hidden" name="no_shipping" value="1">
            <input type="hidden" name="rm" value="1">
            <input type="hidden" name="return" value="http://__________________">
            <input type="hidden" name="cancel_return" value="http://______________?cancel=1&token=' . $token . '">
            <input type="hidden" name="currency_code" value="USD">
        </form>
        <script type="text/javascript">
            window.onload = setTimeout(function() {
                document.getElementById("paypal_form").submit();
            }, 4000);
        </script>';
    //make sure html tags are evaluated
    $rendered_message = DrupalCoreRenderMarkup::create($paypal_html);
    //string will be added to message area of form when 'step' 4 is loaded with buildForm()
    drupal_set_message($rendered_message);
    $form_state->set(['step'], 4);
    ...
}

回答我自己的问题,以防其他人:这是贝宝(Paypal(沙盒问题。

我在PayPal网站上生成了同等按钮表格,在我的代码外无数次提交给沙箱,并获得了类似的间歇性500个错误。

然后,我将代码中的参考转换为实时PayPal信息,多次运行(无需完成交易(,并且没有错误。

因此,关于沙盒配置有一些与实时配置不同的,并引起此(也许是内存问题?(。这一定不能是独特的情况,因此令人沮丧的贝宝(Paypal(不会用沙盒记录限制。但是很高兴继续前进。

编辑:这是PayPal的回应确认。

我们意识到贝宝沙盒中的某些问题,这些问题间歇地导致有效的请求在500内部服务器错误中失败。我们的开发人员正在处理此问题,当问题已完全解决后,我将向您更新。

请注意,此问题仅影响沙箱环境。没有对生产环境的影响。

进一步编辑:paypal的更新。

感谢您的耐心配合

PayPal工程师解决了导致频繁内部服务器错误的问题。但是,他们表示所有请求都应访问https://www.sandbox.paypal.com/域。如果您的集成将发送到https://sandbox.paypal.com(无www(,那么您仍然可能会遇到一些延迟。请更新您的集成,如果是您的情况,请包括www。

相关内容

  • 没有找到相关文章

最新更新