【问题标题】:woocommerce share single ipn to multiple subdomain.woocommerce 将单个 ipn 共享到多个子域。
【发布时间】:2017-11-17 11:21:40
【问题描述】:

我有一个在子域中安装了多个独立 wp 的网站。它不是多站点安装。每个 wp 安装都启用了自己的 woocommerce 商店。

例如:

example.com // main site
first.example.com // subdomain 
2nd.example.com //subdomain

问题,我如何为所有网站使用单个 paypal ipn url?

【问题讨论】:

    标签: php wordpress paypal woocommerce


    【解决方案1】:

    但是,IPN URL 是特定于站点的,因此您不能对多个域使用相同的 URL。这将产生一个严重的问题,导致

    • Membership Pro 没有收到 PayPal 的交易状态通知
    • PayPal 方面的错误可能会导致您的 PayPal 帐户被暂停。

    但您仍然可以通过按 IP 过滤请求来使用 paypal IPN,请在此处查看脚本:http://codeseekah.com/2012/02/11/how-to-setup-multiple-ipn-receivers-in-paypal/

    【讨论】:

      【解决方案2】:

      您只能将 PayPal 帐户配置为将 IPN 发送到单个 URL,但是,如果您愿意,您可以随后将该数据转发到其他 URL。

      由于您使用的是 WordPress,因此完成此操作的最佳方法是安装免费的 PayPal IPN for WordPress,然后购买 IPN Forwarder extension。您要做的是将 PayPal 配置为将 IPN 发送到免费插件提供的 URL,然后转发器将使您能够根据需要将 IPN 数据转发到其他 URL,以便它们全部运行。

      当然,如果您不想使用这些插件,也可以简单地构建自己的 IPN 脚本来转发数据。

      【讨论】:

        【解决方案3】:

        这是我提出的解决方案。

        感谢@ahmed-ginani 指出脚本。由于您无法直接应用脚本,因此还有其他工作需要做。

        基本上这就是我所做的,定义一个自定义的 Paypal ipn 端点。此端点将正确重定向到子域 woocommerce ipn 端点。

        这是脚本:

        在您启用了 woocommerce paypal 网关的每个子域中。

        //first addding the woocommerce paypal ipn in the checkout field, this will be used when paypal sending back to the custom ipn endpoint. 
        
        add_filter('woocommerce_paypal_args', 'add_web_paypal_url');
        function add_web_paypal_url($args){
        
            $url = site_url();
            $ipn = add_query_arg( 'wc-api', 'WC_Gateway_Paypal', $url);
            /*we need to merge it into custom field*/
            $oldcustom = json_decode($args['custom'], true);
            $newcustom = array_merge($oldcustom , array('ipnurl' => $ipn) );
            $args['custom'] = json_encode($newcustom);  
        
            return $args;
        } 
        

        然后在主域站点(或您要定义自定义 ipn 端点的站点)中,我们将 paypal 返回数据转发到适当的 ipn 端点。

        所以,假设自定义 ipn 端点是 https://www.example.com?action=ipn_forwarder

        add_action( 'init', 'paypal_ipn_fowarder' );
        function paypal_ipn_fowarder(){
            if (isset($_GET['action']) && $_GET['action']=='ipn_forwarder'&& isset($_POST['custom']) ) {
                if ( ( $custom = json_decode( $_POST['custom'] ) ) && is_object( $custom ) ) {
        
                    $ipnurl  = $custom->ipnurl;
                    if(isset($ipnurl)){
                        $data = array();
                        foreach ($_POST as $key => $value) $data []= urlencode($key).'='.urlencode($value);
                        $data = implode('&', $data);
        
                        $ch = curl_init(); /* Initialize */
        
                        curl_setopt($ch, CURLOPT_URL, $ipnurl);
                        curl_setopt($ch, CURLOPT_POST, count($data));
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
                        curl_exec($ch); /* Execute HTTP request */
        
                        curl_close($ch); /* Close */
        
                        header( 'HTTP/1.1 200 OK', true, 200 );
                        exit();
                    }else{
                            return;
                    }
        
                }
            }
        }
        

        就是这样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-21
          • 2020-10-11
          • 2021-12-26
          • 1970-01-01
          • 2012-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多