Authorize.net 客户配置文件的第 22 条军规:无法在不添加信用卡的情况下创建配置文件 - 违反 PCI

Catch-22 For Authorize.net Customer Profiles: Cannot create profile without adding credit card - violates PCI

自定义配置文件 API 声称允许客户输入他们的付款详细信息并将其保存在 Authorize.net 上,而信用卡号不会访问我们的服务器以保持 PCI 合规性。但是,为了创建客户资料,首先需要信用卡号!我想访问托管表单,但它需要客户资料 ID。要创建客户资料 ID,我必须创建客户资料。要创建客户资料,需要信用卡号。 API 仅使用服务器端语言,因此这意味着信用卡号正在访问我们的服务器。

我尝试编辑 API 参考中的示例请求并删除 <payment>,但是提交时出现错误。

我想我应该能够创建一个空白的客户资料,显示表格,允许用户输入他们的付款细节,保存到 Authorize.net,然后在订阅计费期间获取付款细节.

https://developer.authorize.net/api/reference/index.html#customer-profiles-create-customer-profile

<createCustomerProfileRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
   <merchantAuthentication>
     <name>5GwYqmx58k</name>
     <transactionKey>xxxxxxxxxxxxxxxxxxxxxxxx</transactionKey>
    </merchantAuthentication>
   <profile>
     <merchantCustomerId>Merchant_Customer_ID</merchantCustomerId>
     <description>Profile description here</description>
     <email>customer-profile-email@here.com</email>
     <paymentProfiles>
       <customerType>individual</customerType>
      </paymentProfiles>
    </profile>
    <validationMode>testMode</validationMode>
  </createCustomerProfileRequest>

Response: E00029 : Payment information is required.

文档:https://developer.authorize.net/api/reference/features/customer_profiles.html

PCI DSS 允许卡数据通过商家的服务器,但是商家随后负责确保他们的环境完全符合 PCI DSS。要缩小您的 PCI 范围并避免敏感数据通过您的服务器,您可以使用 Accept.js 或接受客户来创建客户资料。

https://developer.authorize.net/api/reference/features/accept.html

要创建不包含付款详细信息的客户资料,请使用以下不包含付款或验证对象的内容:

<createCustomerProfileRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> 
   <merchantAuthentication>
     <name>*</name>
     <transactionKey>*</transactionKey>
    </merchantAuthentication>
   <profile>
     <merchantCustomerId>Merchant_Customer_ID</merchantCustomerId>
     <email>customer-profile-email99@here.com</email>
    </profile>
  </createCustomerProfileRequest>