내 사이트의 사용자는 아이템 바구니를 주문할 수 있습니다.PayPal의 나의 주문 바구니 확인
이 작업이 끝나면 결제 버튼을 클릭 할 수 있습니다.
PayPal을 사용하여 결제를하고 싶습니다.
사용자가 결제 버튼을 클릭하면 사용자는 PayPal로 리디렉션되고 지불 할 제품의 개요를 볼 수 있습니다.
사용자가 결제 과정을 거치는 경우 사용자는 내 성공 페이지로 리디렉션됩니다.
그러나 나는 성공 페이지가 지불의 트랜잭션 id를 받기를 기대하지만 paypal은 토큰과 payerid 만 되돌려 보냅니다.
function checkoutAction()
{
$request = $this->getRequest();
require_once(LIB_PATH.'/MFW/Paypal/Flows/Paypal_NVP.php');
$paypal_nvp = new MFW_Paypal_NVP();
// this should normally be filled by looping though the basket items
$data = array('L_PAYMENTREQUEST_0_NAME0'=>'Single License',
'L_PAYMENTREQUEST_0_NUMBER0'=>'1111-2222-3333-4444-5555-6666-7777-8888',
'L_PAYMENTREQUEST_0_AMT0'=>39.99, // or enterprise 299.00
'L_PAYMENTREQUEST_0_QTY0'=>1,
);
$_SESSION['Payment_Amount'] = 39.99;
$result = $paypal_nvp->CallShortcutExpressCheckout(59.98, $data);
$ack = strtoupper($result['ACK']);
if($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
$paypal->RedirectToPayPal($result['TOKEN']);
exit();
}
}
Paypal_NCP 클래스의 코드 :
function generate_nvp_string($total_value, $data = array())
{
$params = array('PAYMENTREQUEST_0_AMT'=>$total_value,
'PAYMENTREQUEST_0_PAYMENTACTION'=>$this->payment_type,
'RETURNURL'=>$this->return_url,
'CANCELURL'=>$this->cancel_url,
'PAYMENTREQUEST_0_CURRENCYCODE'=>$this->currency,
);
$params = array_merge($params, $data);
$nvp_string = '';
foreach($params as $name => $value) {
$nvp_string.= '&'.$name.'='.$value;
}
// example string
// &PAYMENTREQUEST_0_AMT=39.99&PAYMENTREQUEST_0_PAYMENTACTION=Sale&RETURNURL=http://return-address&CANCELURL=http://cancel-address&PAYMENTREQUEST_0_CURRENCYCODE=EUR&L_PAYMENTREQUEST_0_NAME0=Single License&L_PAYMENTREQUEST_0_NUMBER0=1111-2222-3333-4444-5555-6666-7777-8888&L_PAYMENTREQUEST_0_AMT0=39.99&L_PAYMENTREQUEST_0_QTY0=1
return $nvp_string;
}
function CallShortcutExpressCheckout($total_value, $data = array())
{
$_SESSION['currencyCodeType'] = $this->currency;
$_SESSION['PaymentType'] = $this->payment_type;
$result = $this->hash_call('SetExpressCheckout', $this->generate_nvp_string($total_value, $data));
$ack = strtoupper($result['ACK']);
if ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
$_SESSION['TOKEN'] = urldecode($result['TOKEN']);
}
return $result;
}
어떻게 할 체크 아웃은하지
<form action="/en/checkout">
<input type="submit" name="submit" value="Checkout">
</form>
내 코드 :
내 체크 아웃 양식은 다음과 같습니다 백 오피스에서 지불을 처리 할 수있는 거래 정보를 얻었습니까? (이 트랜잭션 ID가 필요합니다)
는 게시,하지만 매우 유망한 보이는 것을 밖으로 시도하지 않았습니다. 나는 그것을 밖으로 시도 갈 것입니다. 나는 어리석은 질문이나 RTFM 매뉴얼 질문을하는 것을 정말로 싫어한다. 하지만 PayPal의 문서는 내 인생에서 만난 최악의 문서입니다. 거기서 아무 것도 찾을 수 없습니다. 예 : 결제 상태를 확인하기 위해 IPN이 필요하지 않습니다. 전자 수표 및 물건 (처리/검증하는 데 약간의 시간이 걸릴 수 있습니다)? – PeeHaa
예, 생성 된 트랜잭션을 추적하려면 IPN을 사용하십시오. 그래도 필요하지는 않습니다. DoExpressCheckoutPayment를 호출하고 ACK = Success 응답을 받으면 PAYMENTSTATUS = Completed 또는 Pending이 표시됩니다. – Robert