使用authorizenet gem1.8.9(Ruby1.9.3)调用Authorize.Net API创建客户档案失败
我来帮你梳理下这个问题——你用authorizenet gem 1.8.9搭配Ruby 1.9.3,在调用Authorize.Net API创建客户档案时碰了壁对吧?先看你贴的代码,这里有几个关键问题得调整:
问题分析
- 请求构造参数错误:你直接实例化
CreateCustomerProfileRequest时传了nil,nil,nil, 'liveMode',但这个版本gem的CreateCustomerProfileRequest构造函数参数顺序是merchantAuthentication, profile, validationMode, mergeDuplicateProfiles,前三个nil会导致请求缺少核心的身份验证信息,而且liveMode也不是这里该传的参数。 - 未正确传递商户认证信息:你初始化了
Transaction对象,但没有把它的认证信息关联到请求上,API请求必须携带商户ID和密钥才能通过验证。
修正后的代码
require 'authorizenet' # 初始化Transaction,指定沙箱环境(生产环境换成:production) transaction = AuthorizeNet::API::Transaction.new(some_id, some_key, :gateway => :sandbox) # 构建客户档案实体,填写必填信息 customer_profile = AuthorizeNet::API::CustomerProfileType.new( "sumeetyesme1870", # 自定义商户客户ID "sumeet new", # 客户描述 "sumeet@example.com"# 客户邮箱 ) # 创建请求对象,无需手动传认证信息(Transaction会自动处理) request = AuthorizeNet::API::CreateCustomerProfileRequest.new request.profile = customer_profile # 可选:设置验证模式,比如关闭验证(用枚举值,不是字符串) request.validationMode = AuthorizeNet::API::ValidationModeEnum::none # 发送请求并处理响应 response = transaction.create_customer_profile(request) if response.messages.resultCode == AuthorizeNet::API::MessageTypeEnum::Ok puts "客户档案创建成功!ID: #{response.customerProfileId}" else puts "创建失败: #{response.messages.messages[0].text}" end
关键说明
- 认证信息自动关联:通过
Transaction对象来发送请求,它会自动把你初始化时传入的some_id和some_key封装成merchantAuthentication,不用手动构造这个对象。 - 环境与验证模式区分:沙箱/生产环境是在
Transaction初始化时用:gateway指定的,而validationMode是控制支付信息验证的参数,要使用gem提供的枚举值(比如AuthorizeNet::API::ValidationModeEnum::none),不能直接传字符串'liveMode'。 - 必填参数完整性:
CustomerProfileType的三个参数都是必填项,你之前的代码虽然填了,但请求因为缺少认证信息根本无法到达API服务器。
内容的提问来源于stack exchange,提问作者Sumeet Masih
相关产品推荐
相关产品推荐

