在使用 API 创建客户资料时,我面临着一种非常奇怪的行为。虽然我已经彻底阅读了文档但没有成功。
我customer profile
首先在没有可用的配置文件时创建一个,payment profile
但下一次当用户返回并添加payment profile
(因为客户配置文件已经存在)我只使用createCustomerPaymentProfile
。问题是,在第一步中我不包括在内$billto->setZip("44628");
,而且进展顺利。但是当我只做payment Profile
它时,它要求我包含zip code
其他明智的东西,它会给出错误
“有一个或多个缺失或无效的必填字段。”
我使用的是与文档的 php 部分中完全相同的代码,只是文本/参数的更改。
制作客户档案:
private function createCustomerProfile($data)
{
/* Create a merchantAuthenticationType object with authentication details
retrieved from the constants file */
$merchantAuthentication = new AnetAPI\MerchantAuthenticationType();
$merchantAuthentication->setName("auth");
$merchantAuthentication->setTransactionKey("transkey");
// Set the transaction's refId
$refId = 'ref' . time();
$paymentProfile=$this->newPaymentProfile($data);
// Create a new CustomerProfileType and add the payment profile object
$customerProfile = new AnetAPI\CustomerProfileType();
$customerProfile->setDescription("Customer 2 Test PHP");
$customerProfile->setMerchantCustomerId($name. time());
$customerProfile->setEmail($email);
$customerProfile->setpaymentProfiles($paymentProfile);
// Assemble the complete transaction request
$request = new AnetAPI\CreateCustomerProfileRequest();
$request->setMerchantAuthentication($merchantAuthentication);
$request->setRefId($refId);
$request->setProfile($customerProfile);
// Create the controller and get the response
$controller = new AnetController\CreateCustomerProfileController($request);
$response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX);
if (($response != null) && ($response->getMessages()->getResultCode() == "Ok")) {
$paymentProfiles = $response->getCustomerPaymentProfileIdList();
//Insert into database for the profile and payment profile update
} else {
echo "ERROR : Invalid response\n";
$errorMessages = $response->getMessages()->getMessage();
echo "Response : " . $errorMessages[0]->getCode() . " " .$errorMessages[0]->getText() . "\n";
}
return $response;
用于制作客户付款资料
private function createCustomerPaymentProfile($data){
/* Create a merchantAuthenticationType object with authentication details
retrieved from the constants file */
$merchantAuthentication = new AnetAPI\MerchantAuthenticationType();
$merchantAuthentication->setName("name");
$merchantAuthentication->setTransactionKey("transkey");
// Set the transaction's refId
$refId = 'ref' . time();
$paymentProfile=$this->newPaymentProfile($data);
// Assemble the complete transaction request
$paymentprofilerequest = new AnetAPI\CreateCustomerPaymentProfileRequest();
$paymentprofilerequest->setMerchantAuthentication($merchantAuthentication);
// Add an existing profile id to the request
$paymentprofilerequest->setCustomerProfileId($data['profile_id']);
$paymentprofilerequest->setPaymentProfile($paymentProfile[0]);
$paymentprofilerequest->setValidationMode("liveMode");
// Create the controller and get the response
$controller = new AnetController\CreateCustomerPaymentProfileController($paymentprofilerequest);
$response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX);
if (($response != null) && ($response->getMessages()->getResultCode() == "Ok") ) {
echo "Create Customer Payment Profile SUCCESS: " . $response->getCustomerPaymentProfileId() . "\n";
//Insert into database for the profile and payment profile update
} else {
echo "Create Customer Payment Profile: ERROR Invalid response\n";
$errorMessages = $response->getMessages()->getMessage();
echo "Response : " . $errorMessages[0]->getCode() . " " .$errorMessages[0]->getText() . "\n";
}
return $response;
}
出于可重用性的目的,我制作了一个通用的付款配置文件,该配置文件返回付款配置文件数组
private function newPaymentProfile($data){
// Set credit card information for payment profile
$creditCard = new AnetAPI\CreditCardType();
$creditCard->setCardNumber($data['account_number']);
$creditCard->setExpirationDate($data['date']);
$creditCard->setCardCode($data['securiy_no']);
$paymentCreditCard = new AnetAPI\PaymentType();
$paymentCreditCard->setCreditCard($creditCard);
// Create the Bill To info for new payment type
$billTo = new AnetAPI\CustomerAddressType();
$billTo->setFirstName($data['holder_name']);
$billTo->setAddress($data['billing_address']);
$billTo->setPhoneNumber($data['phone']);
$billTo->setfaxNumber($data['fax']);
// Create a new CustomerPaymentProfile object
$paymentProfile = new AnetAPI\CustomerPaymentProfileType();
$paymentProfile->setCustomerType('individual');
$paymentProfile->setBillTo($billTo);
$paymentProfile->setPayment($paymentCreditCard);
$paymentProfiles[]=$paymentProfile;
return $paymentProfiles;
}