これは私が出てきた解決策です。
ありがとう@ahmed-ginaniは、スクリプトを指摘しました。スクリプトを直接適用することはできないので、まだ他の作業が必要です。
これは基本的には私が行うことで、カスタムPaypal ipnエンドポイントを定義します。このエンドポイントは、サブドメインwoocommerce ipnエンドポイントに適切にリダイレクトされます。ここで
はスクリプトです:あなたが有効になってwoocommerceペイパルゲートウェイを持っているすべてのサブドメインで
。
メインドメインのサイト(またはエンドポイントIPNカスタムを定義するサイト)で次に
//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エンドポイントへ。
ので、エンドポイント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;
}
}
}
}
あるとしましょう。