快速结帐的基本 Paypal 沙箱授权和捕获逻辑
Basic Paypal Sandbox Authorization and Capture Logic for Express Checkout
我不理解或看错了文档部分。这是我第一次做超出基本 IPN 响应的事情。
我有一个开发者帐户,其中包含包括签名在内的所有凭据。我的整个站点是 PHP,我希望对所有 Paypal 授权和捕获使用单一功能。我现在正在写这个功能,只有以下非动态功能
function testHandler()
{
if ( function_exists('get_magic_quotes_gpc') ) { $get_magic_quotes_exists = true; }
$req = '';
$myPost = array(
'USER' => 'USER',
'PWD' => 'PASSWORD',
'SIGNATURE' => 'SIGNATURE',
'METHOD' => 'SetExpressCheckout',
//'METHOD' => 'GetExpressCheckoutDetails',
//'TOKEN' => 'EC-XXXXXXXXXXXX',
'VERSION' => '95'
'PAYMENTREQUEST_0_PAYMENTACTION'=> 'Authorization', #Sets up authorization for a single future payment
'PAYMENTREQUEST_0_AMT' => '1', #The amount authorized
'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', #The currency, e.g. US dollars
'cancelUrl' => 'http://www.yourdomain.com/cancel.html',
'returnUrl' => 'http://www.yourdomain.com/success.html'
);
foreach ( $myPost as $key => $value )
{
if ( $get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1 )
{
$value = urlencode(stripslashes($value));
}
else
{
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$ch = curl_init( 'https://api-3t.sandbox.paypal.com/nvp' );
curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1) ;
curl_setopt( $ch, CURLOPT_POST, 1) ;
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $req );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $ch, CURLOPT_FORBID_REUSE, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Connection: Close') );
if( !( $res = curl_exec($ch) ) ) { curl_close($ch); exit; }
curl_close($ch);
return $res;
}
首先,这是我需要的所有后端吗?提供 $myPost 的内容是根据我们在流程中的任何步骤量身定制的。
我的服务器上有 运行 这个脚本,它 return 是一个令牌。我手动输入令牌以模拟被重定向的客户,我看到一个空白的结帐页面,这是预期的,因为在任何时候都没有传递任何项目详细信息。
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXX
我是否应该像标准快速结账变量一样在创建令牌时在 $myPost 中包含订单详细信息? item_name, 等等。价格都通过了,为什么不显示呢?结帐页面的摘要完全是空的。
接下来,$myPost 中被注释掉的部分需要使用 GetExpressCheckoutDetails 检索 payerID。
当我尝试运行那一步代码时,我得到了这个响应
TOKEN=EC%2dXXXXXXXXXX&BILLINGAGREEMENTACCEPTEDSTATUS=0&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2015%2d01%2d12T22%3a47%3a01Z&CORRELATIONID=403d2feb197db&ACK=Success&VERSION=95&BUILD=14726230&CURRENCYCODE=USD&AMT=1%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=1%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUESTINFO_0_ERRORCODE=0
这是有道理的,因为没有输入付款信息。我是否应该在 Sandbox 期间输入真实的财务信息才能进入下一步?我是否应该在创建令牌时从客户那里收集并传递它?我在哪里可以访问这个创建的令牌并强制执行下一步?
如果这是实时的并且我能够传递项目详细信息以便结帐页面不为空,则客户将输入他们的详细信息并被重定向到后页面,并在 URL.那时我可以将令牌与 GetExpressCheckoutDetails 一起使用并检索 PayerID?有了那个 PayerID,我可以使用 DoExpressCheckoutPayment 获取最终付款捕获的 t运行saction ID?
感谢阅读
听起来你已经掌握了要点。 Express Checkout 由 3 个单独的 API 调用组成:SetExpressCheckout, GetExpressCheckoutDetails, and DoExpressCheckoutPayment。
SEC 只是该过程的第一步,是的,您可以在调用中包含更多参数,以便显示所有订单数据并按预期使用,如您在前面的链接中所见。
在最后一次 DECP 调用完成之前,不会转移任何资金,只有该请求中包含的详细信息会被保存并通过 PayPal 系统传递。
我不理解或看错了文档部分。这是我第一次做超出基本 IPN 响应的事情。
我有一个开发者帐户,其中包含包括签名在内的所有凭据。我的整个站点是 PHP,我希望对所有 Paypal 授权和捕获使用单一功能。我现在正在写这个功能,只有以下非动态功能
function testHandler()
{
if ( function_exists('get_magic_quotes_gpc') ) { $get_magic_quotes_exists = true; }
$req = '';
$myPost = array(
'USER' => 'USER',
'PWD' => 'PASSWORD',
'SIGNATURE' => 'SIGNATURE',
'METHOD' => 'SetExpressCheckout',
//'METHOD' => 'GetExpressCheckoutDetails',
//'TOKEN' => 'EC-XXXXXXXXXXXX',
'VERSION' => '95'
'PAYMENTREQUEST_0_PAYMENTACTION'=> 'Authorization', #Sets up authorization for a single future payment
'PAYMENTREQUEST_0_AMT' => '1', #The amount authorized
'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', #The currency, e.g. US dollars
'cancelUrl' => 'http://www.yourdomain.com/cancel.html',
'returnUrl' => 'http://www.yourdomain.com/success.html'
);
foreach ( $myPost as $key => $value )
{
if ( $get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1 )
{
$value = urlencode(stripslashes($value));
}
else
{
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$ch = curl_init( 'https://api-3t.sandbox.paypal.com/nvp' );
curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1) ;
curl_setopt( $ch, CURLOPT_POST, 1) ;
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $req );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $ch, CURLOPT_FORBID_REUSE, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Connection: Close') );
if( !( $res = curl_exec($ch) ) ) { curl_close($ch); exit; }
curl_close($ch);
return $res;
}
首先,这是我需要的所有后端吗?提供 $myPost 的内容是根据我们在流程中的任何步骤量身定制的。
我的服务器上有 运行 这个脚本,它 return 是一个令牌。我手动输入令牌以模拟被重定向的客户,我看到一个空白的结帐页面,这是预期的,因为在任何时候都没有传递任何项目详细信息。
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXX
我是否应该像标准快速结账变量一样在创建令牌时在 $myPost 中包含订单详细信息? item_name, 等等。价格都通过了,为什么不显示呢?结帐页面的摘要完全是空的。
接下来,$myPost 中被注释掉的部分需要使用 GetExpressCheckoutDetails 检索 payerID。
当我尝试运行那一步代码时,我得到了这个响应
TOKEN=EC%2dXXXXXXXXXX&BILLINGAGREEMENTACCEPTEDSTATUS=0&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2015%2d01%2d12T22%3a47%3a01Z&CORRELATIONID=403d2feb197db&ACK=Success&VERSION=95&BUILD=14726230&CURRENCYCODE=USD&AMT=1%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=1%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUESTINFO_0_ERRORCODE=0
这是有道理的,因为没有输入付款信息。我是否应该在 Sandbox 期间输入真实的财务信息才能进入下一步?我是否应该在创建令牌时从客户那里收集并传递它?我在哪里可以访问这个创建的令牌并强制执行下一步?
如果这是实时的并且我能够传递项目详细信息以便结帐页面不为空,则客户将输入他们的详细信息并被重定向到后页面,并在 URL.那时我可以将令牌与 GetExpressCheckoutDetails 一起使用并检索 PayerID?有了那个 PayerID,我可以使用 DoExpressCheckoutPayment 获取最终付款捕获的 t运行saction ID?
感谢阅读
听起来你已经掌握了要点。 Express Checkout 由 3 个单独的 API 调用组成:SetExpressCheckout, GetExpressCheckoutDetails, and DoExpressCheckoutPayment。
SEC 只是该过程的第一步,是的,您可以在调用中包含更多参数,以便显示所有订单数据并按预期使用,如您在前面的链接中所见。
在最后一次 DECP 调用完成之前,不会转移任何资金,只有该请求中包含的详细信息会被保存并通过 PayPal 系统传递。