Php 贝宝服务器端确认

Php 贝宝服务器端确认,php,android,paypal,Php,Android,Paypal,这部分对我来说是新的,所以这可能是一个非常明显的答案。我在android应用程序中使用了PayPal MPL,在PHP服务器端,我使用它来验证付款: function verify_paypal($payKey, $appID) { global $payPalUser_Id, $payPalPassword, $payPalSig, $amount, $currency; $headerArray = array( 'X-PAYPAL-SECURITY-USERID:'.$payPalUs

这部分对我来说是新的,所以这可能是一个非常明显的答案。我在android应用程序中使用了PayPal MPL,在PHP服务器端,我使用它来验证付款:

function verify_paypal($payKey, $appID)
{
  global $payPalUser_Id, $payPalPassword, $payPalSig, $amount, $currency;
$headerArray = array(
'X-PAYPAL-SECURITY-USERID:'.$payPalUser_Id,
'X-PAYPAL-SECURITY-PASSWORD:'.$payPalPassword,
'X-PAYPAL-SECURITY-SIGNATURE:'.$payPalSig,
'X-PAYPAL-APPLICATION-ID:'.$appID,
'X-PAYPAL-REQUEST-DATA-FORMAT:NV',
'X-PAYPAL-RESPONSE-DATA-FORMAT:XML'
);

$url="https://svcs.paypal.com/AdaptivePayments/PaymentDetails?payKey={$payKey}&requestEnvelope.errorLanguage=en_US";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);

$adaptiveResponse = curl_exec($ch);
curl_close($ch);

if (!is_null($adaptiveResponse)){

  //check result
  $dom_document = new DOMDocument();
  $dom_document->loadXML($adaptiveResponse);
  $searchNode = $dom_document->getElementsByTagName("responseEnvelope"); 

foreach( $searchNode as $searchNode ) 
{ 
    $xmlResponse = $searchNode->getElementsByTagName( "ack" ); 
    $valueResponse = $xmlResponse->item(0)->nodeValue; 
} 

if (strtolower($valueResponse) =="failure"){
      return false;
    }

$xml=simplexml_load_string($adaptiveResponse);
$valueCurrency=$xml->currencyCode;
$valueStatus=$xml->status;

$searchNode = $dom_document->getElementsByTagName("receiver"); 

foreach( $searchNode as $searchNode ) 
{ 
    $xmlAmount = $searchNode->getElementsByTagName( "amount" ); 
    $valueAmount = $xmlAmount->item(0)->nodeValue; 

    $xmlEmail = $searchNode->getElementsByTagName( "email" ); 
    $valueEmail = $xmlEmail->item(0)->nodeValue; 
} 

$searchNode = $dom_document->getElementsByTagName("paymentInfo"); 

foreach( $searchNode as $searchNode ) 
{ 
    $xmlSenderStatus = $searchNode->getElementsByTagName( "senderTransactionStatus" ); 
    $valueSenderStatus = $xmlSenderStatus->item(0)->nodeValue;  
} 

if ((strtolower($valueStatus) =="completed")&&(strtolower($valueSenderStatus) =="completed")&&(strtolower($valueEmail) =="mymail@paypal.com")&&($valueAmount==$amount)&&($valueCurrency==$currency)){
  return true;
} else {
  return false;
}
}
return false;
};
但有了新的Android SDK,我得到了一个PaymentConfirmation对象:

PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);

我应该如何从confirm获得$payKey,还是应该以其他方式验证付款

根据您使用的MSDK版本,您可能需要像使用to或REST API一样使用自适应支付。请查看此页面,了解如何验证付款

OK-看起来我需要使用此选项:confirm.getproofpayment.getPaymentId@Diego通常情况下,您会向服务器发送confirm.toJson对象,并根据环境上的属性获取payment_id,然后对PayPal服务器执行验证代码,请参见此处的onActivityResult示例