You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidus框架下PayPal沙箱非PayPal支付方式结账失败

问题:Solidus+PayPal沙箱支付地区限制异常
  • 基于Ruby on Rails结合Solidus框架搭建的网店,在PayPal沙箱环境中出现异常:使用信用卡或SEPA支付方式、填写德国地址结账时,系统提示店铺不支持该地区配送;但使用PayPal账户支付、填写柏林地址时可正常完成结账。

错误提示截图:显示店铺不支持配送至当前地区的提示信息

控制台错误日志

Started GET "/solidus_paypal_commerce_platform/shipping_rates?order_id=R977809399&order_token=[FILTERED]&address%5Bcity%5D=Berlin&address%5Bstate%5D=&address%5Bcountry_code%5D=DE&address%5Bpostal_code%5D=10117" for 127.0.0.1 at 2022-09-29 20:29:49 +0200
Processing by SolidusPaypalCommercePlatform::ShippingRatesController#simulate_shipping_rates as */*
  Parameters: {"order_id"=>"R977809399", "order_token"=>"[FILTERED]", "address"=>{"city"=>"Berlin", "state"=>"", "country_code"=>"DE", "postal_code"=>"10117"}}
  Spree::User Load (0.1ms)  SELECT "spree_users".* FROM "spree_users" WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."spree_api_key" = ? LIMIT ?  [["spree_api_key", "undefined"], ["LIMIT", 1]]
  Spree::Order Load (0.1ms)  SELECT "spree_orders".* FROM "spree_orders" WHERE "spree_orders"."number" = ? LIMIT ?  [["number", "R977809399"], ["LIMIT", 1]]
  Spree::User Load (0.1ms)  SELECT "spree_users".* FROM "spree_users" WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."id" = ? LIMIT ?  [["id", 3], ["LIMIT", 1]]
  CACHE Spree::Order Load (0.0ms)  SELECT "spree_orders".* FROM "spree_orders" WHERE "spree_orders"."number" = ? LIMIT ?  [["number", "R977809399"], ["LIMIT", 1]]
  CACHE Spree::User Load (0.0ms)  SELECT "spree_users".* FROM "spree_users" WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."id" = ? LIMIT ?  [["id", 3], ["LIMIT", 1]]
  TRANSACTION (0.0ms)  begin transaction
  Spree::Country Load (0.1ms)  SELECT "spree_countries".* FROM "spree_countries" WHERE "spree_countries"."iso" = ? LIMIT ?  [["iso", "DE"], ["LIMIT", 1]]
  Spree::State Load (0.1ms)  SELECT "spree_states".* FROM "spree_states" WHERE "spree_states"."country_id" = ? AND "spree_states"."abbr" = ? ORDER BY "spree_states"."name" ASC LIMIT ?  [["country_id", 57], ["abbr", ""], ["LIMIT", 1]]
  Spree::State Load (0.1ms)  SELECT "spree_states".* FROM "spree_states" WHERE "spree_states"."country_id" = ? AND "spree_states"."name" = ? ORDER BY "spree_states"."name" ASC LIMIT ?  [["country_id", 57], ["name", ""], ["LIMIT", 1]]
  Spree::Store Load (0.0ms)  SELECT "spree_stores".* FROM "spree_stores" WHERE "spree_stores"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Spree::Order Exists? (0.1ms)  SELECT 1 AS one FROM "spree_orders" WHERE "spree_orders"."number" = ? AND "spree_orders"."id" != ? LIMIT ?  [["number", "R977809399"], ["id", 10], ["LIMIT", 1]]
  Spree::Adjustment Load (0.0ms)  SELECT "spree_adjustments".* FROM "spree_adjustments" WHERE "spree_adjustments"."order_id" = ? AND "spree_adjustments"."source_type" = ?  [["order_id", 10], ["source_type", "Spree::PromotionAction"]]
  Spree::LineItem Load (0.0ms)  SELECT "spree_line_items".* FROM "spree_line_items" WHERE "spree_line_items"."order_id" = ? ORDER BY "spree_line_items"."created_at" ASC, "spree_line_items"."id" ASC  [["order_id", 10]]
  Spree::Product Load (0.0ms)  SELECT "spree_products".* FROM "spree_products" INNER JOIN "spree_variants" ON "spree_products"."id" = "spree_variants"."product_id" WHERE "spree_variants"."id" = ? LIMIT ?  [["id", 45], ["LIMIT", 1]]
  TRANSACTION (0.0ms)  rollback transaction
Completed 422 Unprocessable Entity in 35ms (Views: 0.2ms | ActiveRecord: 0.8ms | Allocations: 31326)

调整方向提示

  • 检查Solidus配送基础设置:确认德国(DE)已加入允许配送的国家列表,同时检查启用的配送方式(如Flat Rate、第三方物流)是否开启了对德国的支持。重点关注是否强制要求填写州/省信息——日志显示系统在查询空字符串的state,而德国地址通常不需要州缩写,这可能是验证失败的核心原因。
  • 排查PayPal插件的地址处理差异:PayPal账户支付时可能会自动补全地址信息(比如填充州字段),但信用卡/SEPA支付时直接使用用户输入的空state字段,导致Solidus返回422验证错误。可以修改SolidusPaypalCommercePlatform::ShippingRatesController#simulate_shipping_rates方法,允许德国地址的state字段为空,或自动填充默认值。
  • 验证地址模型规则:在Rails控制台测试创建空state的德国地址,确认是否触发验证错误:
    Spree::Address.new(country: Spree::Country.find_by(iso: 'DE'), city: 'Berlin', postal_code: '10117', state: nil).valid?
    
    如果返回false,需要调整Spree::Address的验证规则,针对德国地址放宽state必填限制。
  • 对比不同支付方式的地址同步:查看PayPal账户支付和信用卡支付完成后,订单的shipping_address字段差异,确认state字段的处理逻辑是否存在不同。

内容的提问来源于stack exchange,提问作者xeruf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:15:39