PHP Laravel如何通过交易ID从Authorize交易获取完整信用卡号
问题原因
Authorize.Net出于PCI DSS支付合规要求,默认仅返回掩码后的信用卡号(仅后四位可见),你当前拿到的掩码值是平台的默认安全策略返回结果,并非代码逻辑错误。
解决步骤
1. 开通账户权限
- 你的商户账户必须先通过PCI DSS SAQ D合规认证,只有达到该合规等级才有权限申请获取完整信用卡号
- 联系Authorize.Net官方支持,提交合规证明,申请开通交易详情接口返回完整卡号的权限,该权限默认关闭,必须人工审核后才能开通
- 如需在沙箱环境测试,需单独申请沙箱账户的对应权限
2. 调整API请求参数
在原请求中新增setIncludeSensitiveData(true)配置,明确要求接口返回敏感数据,调整后的代码如下:
$check_request = new AnetAPI\GetTransactionDetailsRequest(); $check_request->setMerchantAuthentication($merchantAuthentication); $check_request->setTransId($transId); // 新增以下配置,开通权限后生效 $check_request->setIncludeSensitiveData(true); $check_controller = new AnetController\GetTransactionDetailsController($check_request); if(env('AUTHORIZE_MODE') == 'SANDBOX'){ $response2 = $check_controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX); } else{ $response2 = $check_controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::PRODUCTION); } $card_no = $response2->getTransaction()->getPayment()->getCreditCard()->getCardNumber();
重要提示
- 获取到的完整信用卡号禁止明文存储、传输,所有操作必须严格符合PCI DSS规范,否则会面临高额罚款、商户账户被停用的风险
- 如无必须使用完整卡号的业务场景,建议直接使用平台返回的支付令牌完成后续支付、对账操作,可大幅降低合规成本
内容的提问来源于stack exchange,提问作者Rafi Ullah
相关产品推荐
相关产品推荐

