【发布时间】:2015-01-16 10:08:02
【问题描述】:
这部分对我来说有点新鲜,所以这可能是一个非常明显的答案。我在我的 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);
我应该如何从确认中获取 $payKey,或者我应该以不同的方式验证付款?
【问题讨论】: