0

在使用 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;
    }
4

0 回答 0