Получение одобрено как [RESPMSG] в периодическом платеже Payflow, но нет истории транзакций в учетной записи PayPal

Я пытаюсь сделать один раз и повторяющийся платеж с помощью Payflow в режиме песочницы.

Вот мой код:

$sandbox = TRUE;
$api_endpoint = 'https://pilot-payflowpro.paypal.com';

$VENDOR = '***abcd';
$PARTNER = 'PayPal';
$PWD = '**ab#$12345';
$USER = '***abcd';
$secureTokenId = uniqid('', true);

if ($payment_type == 'Non Recurring') {
// Store request params in an array
$request_params = array
(
'USER' => $USER,
'PWD' => $PWD,
'PARTNER' => $PARTNER,
'VENDOR' => $VENDOR,
'TRXTYPE' => 'A',
'TENDER'=> 'C',
'ACTION' => 'A',
'ACCT' => $results[0]->cerditcardno,
'AMT' => $price,
'EXPDATE' => $results[0]->cardexpiresmounth.$results[0]->cardexpiresyear,
'CVV2' => $results[0]->cvc,
'IPADDRESS' => $_SERVER['REMOTE_ADDR'],
'FIRSTNAME' => $results[0]->display_name,
'LASTNAME' =>  $results[0]->lastname,
'STREET' => $results[0]->Address,
'CITY' => $results[0]->city,
'STATE' => $results[0]->state,
'COUNTRYCODE' => 'US',
'ZIP' => $results[0]->zipcode,
);

// Loop through $request_params array to generate the NVP string.
$nvp_string1 = '';
foreach($request_params as $var=>$val){
$nvp_string1 .= '&'.$var.'='.$val;
}
$nvp_string = substr($nvp_string1, 1);

// Send NVP string to PayPal and store response
$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_URL, $api_endpoint);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $nvp_string);

$result = curl_exec($curl);
curl_close($curl);

$paypalResponse = array();
parse_str($result, $paypalResponse);

$paypal_result = $paypalResponse['RESULT'];
$securetoken = $paypalResponse['SECURETOKEN'];
$securetoken_id = $paypalResponse['SECURETOKENID'];
$respmsg = $paypalResponse['RESPMSG'];
$payload=json_encode($paypalResponse);

$paymenttable=$wpdb->prefix."payments";
$insert_txn = "INSERT INTO $paymenttable(`txn_id`,`status`,`booking_id`,`amount`,`payload`,`timestamp`) VALUES ('$txn_id','$respmsg','$book_id','$amount','$payload',UNIX_TIMESTAMP(NOW()))";

$insert_txn_query = $wpdb->query($insert_txn);

// Parse the API response

if($respmsg == 'Approved'){
$bookingtable=$wpdb->prefix."booking";
$wpdb->query("UPDATE $bookingtable SET subscription_status='Active' WHERE id='$booking_id'");
$payment_success = 1;
}
else{
$payment_success = 0;
}
}
else{

if ($_POST['frequency_id'] == 'Every week' ) {
$billing_period = 'Week';
$billing_frequency = 52;
}
elseif ($_POST['frequency_id'] == 'Every 2 weeks') {
$billing_period = 'SemiMonth';
$billing_frequency = 1;
}
elseif ($_POST['frequency_id'] == 'Every 4 weeks') {
$billing_period = 'Month';
$billing_frequency = 12;
}
// Store request params in an array
$request_params = array
(
'TRXTYPE' => 'A',
'TENDER'=> 'C',
'ACTION' => 'A',
'VERBOSITY' => 'MEDIUM',
'USER' => $USER,
'PWD' => $PWD,
'PARTNER' => $PARTNER,
'VENDOR' => $VENDOR,
'PROFILENAME' => 'RegularSubscription',
'ACCT' => $results[0]->cerditcardno,
'AMT' => $price,
'EXPDATE' => $results[0]->cardexpiresmounth.$results[0]->cardexpiresyear,
'CVV2' => $results[0]->cvc,
'START' => date("mdY"),
'TERM' => '0',
'PAYPERIOD' => $billing_period, #Period of time between billings
'MAXFAILEDPAYMENTS' => 3,    #Maximum failed payments before suspension of the profile
'OPTIONALTRX' => 'S',
'OPTIONALTRXAMT' => '2.00',
'IPADDRESS' => $_SERVER['REMOTE_ADDR'],
'CREATESECURETOKEN' => 'Y',
'SECURETOKENID' => $secureTokenId,
'FIRSTNAME' => $results[0]->display_name,
'LASTNAME' =>  $results[0]->lastname,
'STREET' => $results[0]->Address,
'CITY' => $results[0]->city,
'STATE' => $results[0]->state,
'COUNTRYCODE' => 'US',
'ZIP' => $results[0]->zipcode,
);

// Loop through $request_params array to generate the NVP string.
$nvp_string1 = '';
foreach($request_params as $var=>$val){
$nvp_string1 .= '&'.$var.'='.$val;
}
$nvp_string = substr($nvp_string1, 1);

// setting the curl parameters.
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $api_endpoint);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Make it true for live url.
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $nvp_string);

$result = curl_exec($curl);
// Check if any error occurred
if(curl_errno($curl))
{
echo 'Curl error: ' . curl_error($curl);
}
curl_close($curl);

$paypalResponse = array();
parse_str($result, $paypalResponse);

$paypal_result = $paypalResponse['RESULT'];
$securetoken = $paypalResponse['SECURETOKEN'];
$securetoken_id = $paypalResponse['SECURETOKENID'];
$respmsg = $paypalResponse['RESPMSG'];

}

И вот ответ PayPal, который я получаю:

Array
(
[RESULT] => 0
[RESPMSG] => Approved
[SECURETOKEN] => 9vaaCvieCA0arm7qBM87FrAgw
[SECURETOKENID] => 5853a15a7716b1.59486056
)

Но у меня нет идентификатора транзакции, и я не вижу транзакции в учетной записи песочницы PayPal. Кроме того, когда я захожу в учетную запись менеджера, в разделе «Настройки сервиса» отсутствует профиль для повторяющихся платежей.

Что я делаю неправильно?

0

Решение

Я думаю, что вы передаете CREATESECURETOKEN = Y для создания профиля, который вам не нужен. Даже безопасный идентификатор токена. Ниже приведен пример полезной нагрузки для создания повторяющегося профиля.

Полезная нагрузка:

TRXTYPE=R&TENDER=C&PARTNER=PayPal&VENDOR=Acme&USER=Acme&PWD=a1b2c3d4&ACTION=A
&PROFILENAME=RegularSubscription&AMT=42.00&ACCT=4012888888881881&EXPDATE=0203
&START=12012013&PAYPERIOD=WEEK&TERM=12&OPTIONALTRX=S&OPTIONALTRXAMT=2.00
&COMMENT1=First-time customer

Документация:
https://developer.paypal.com/docs/classic/payflow/recurring-billing/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]