我正在编写一个模块,如果用户提供的邮政编码和地址与他的卡中的信息不匹配,则防止用户结帐(使用支付方式Paypal pro,使用Master Card, Visa等)。
首先,我创建了2个沙盒账户(商家和买家)来检查paypal的反应。以下是我推送到paypal沙箱的请求:
array (
'PAYMENTACTION' => 'Sale',
'IPADDRESS' => '127.0.0.1',
'RETURNFMFDETAILS' => 1,
'AMT' => '30.75',
'CURRENCYCODE' => 'USD',
'INVNUM' => '100011074',
'NOTIFYURL' => 'http://www.spacex.local/paypal/ipn/',
'EMAIL' => 'abcsdf@yahoo.com',
'CREDITCARDTYPE' => 'MasterCard',
'ACCT' => '5110925307034185',
'EXPDATE' => '112024',
'CVV2' => '185',
'ISSUENUMBER' => NULL,
'ITEMAMT' => '22.00',
'TAXAMT' => '0.00',
'SHIPPINGAMT' => '8.75',
'BUSINESS' => NULL,
'FIRSTNAME' => 'fgdgdfg',
'LASTNAME' => 'dgdgdfg',
'MIDDLENAME' => NULL,
'SALUTATION' => NULL,
'SUFFIX' => NULL,
'COUNTRYCODE' => 'US',
'STATE' => 'AK',
'CITY' => 'sdfsdfsdf',
'STREET' => 'asdfasdfsdf',
'ZIP' => '12345',
'PHONENUM' => '12345679',
'SHIPTOCOUNTRYCODE' => 'US',
'SHIPTOSTATE' => 'AK',
'SHIPTOCITY' => 'sdfsdfsdf',
'SHIPTOSTREET' => 'asdfasdfsdf',
'SHIPTOZIP' => '12345',
'SHIPTOPHONENUM' => '12345679',
'SHIPTOSTREET2' => '',
'STREET2' => '',
'SHIPTONAME' => 'fgdgdfg dgdgdfg',
'METHOD' => 'DoDirectPayment',
)
这是响应
array (
'TIMESTAMP' => '2015-05-26T09:03:56Z',
'CORRELATIONID' => '181a742e9983a',
'ACK' => 'Success',
'VERSION' => '72.0',
'BUILD' => '16770825',
'AMT' => '30.75',
'CURRENCYCODE' => 'USD',
'AVSCODE' => 'X',
'CVV2MATCH' => 'M',
'TRANSACTIONID' => '5SN572797S568915L',
)
我需要的信息是AVSCODE
,其值为"X",表示"街道地址和9位邮政编码匹配"。(见https://developer.paypal.com/docs/classic/api/AVSResponseCodes/avs-response-codes)。然而,我的买家沙盒帐户甚至没有任何地址和邮政编码(因为我找不到任何地方保存地址和邮政编码到我的帐户),为什么会发生这种情况?
卡片,因此AVS验证,在沙箱中是不真实的。
AVS是发卡机构对卡上的账单地址进行的检查,而不是PayPal对PayPal帐户地址进行的检查(注意PayPal帐户本身甚至没有"账单地址")。无(真)卡,无(真)发卡人,无(真)AVS。
如何在沙箱中进行阴性检测(包括AVS)参见:
https://developer.paypal.com/docs/classic/lifecycle/sb_error-conditions/(注意这也是google对"paypal sandbox avs test"的最高参考)