ruby-on-rails – 更新Stripe的客户信用卡信息
发布时间:2020-12-17 02:46:47 所属栏目:百科 来源:网络整理
导读:我终于想出了如何使用这个 tutorial实现Stripes Monthly Billing. 到目前为止,用户可以创建使用Stripe删除其订阅.但我无法调用API中的哈希值以让用户更改其信用卡信息. 问题:如何调用/传递文档中的子参数以使用我创建的update_card方法更新信用卡字段? 这
我终于想出了如何使用这个
tutorial实现Stripes Monthly Billing.
到目前为止,用户可以创建&使用Stripe删除其订阅.但我无法调用API中的哈希值以让用户更改其信用卡信息. 问题:如何调用/传递文档中的子参数以使用我创建的update_card方法更新信用卡字段? 这是我的评论代码: CONTROLLER class SubscriptionsController < ApplicationController def update @subscription = current_user.subscription ### I use the method update_card to update the customer's card @subscription.update_card if @subscription.update_card redirect_to edit_subscription_path,:success => 'Updated Card.' else flash.alert = 'Unable to update card.' render :edit end end end 楷模 class Subscription < ActiveRecord::Base attr_accessible :plan_id,:user_id,:email,:stripe_customer_token,:last_4_digits,:card_token,:card_name,:exp_month,:exp_year,:stripe_card_token attr_accessor :stripe_card_token belongs_to :plan belongs_to :user ### How can this work with my edit form. Would I need to store each person's new card? def token token = Stripe::Token.create( :card => { :number => "4242424242424242",:exp_month => 1,:exp_year => 2015,:cvc => "314" },) end def update_card customer = Stripe::Customer.retrieve(stripe_customer_token) customer.email = "myteam@gmail.com" customer.description = "Unlimited" customer.card = token.id customer.save rescue Stripe::StripeError => e logger.error "Stripe Error: " + e.message errors.add :base,"#{e.message}." false end 这是Stripe的文档示例响应 #<Stripe::Customer id=cus_3OWtLd5pirU4te 0x00000a> JSON: { "object": "customer","created": 1390946171,"id": "cus_3OWtLd5pirU4te","livemode": false,"description": "Customer for test@example.com","email": null,"delinquent": false,"metadata": { },"subscription": null,"discount": null,"account_balance": 0,"currency": "usd",###I need to be able to update the data inside the customers card "cards": { "object": "list","count": 1,"url": "/v1/customers/cus_3OWtLd5pirU4te/cards","data": [ { "id": "card_103OWt2eZvKYlo2CgyXLaqcd","object": "card","last4": "4242","type": "Visa","exp_month": 9,"exp_year": 2015,"fingerprint": "Xt5EWLLDS7FJjR1c","customer": "cus_3OWtLd5pirU4te","country": "US","name": "Brendan Lynch","address_line1": null,"address_line2": null,"address_city": null,"address_state": null,"address_zip": null,"address_country": null,"cvc_check": "pass","address_line1_check": null,"address_zip_check": null } ] },"default_card": "card_103OWt2eZvKYlo2CgyXLaqcd" } 参考:Stripe Documentation for Ruby js.coffee jQuery -> Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) subscription.setupForm() subscription = setupForm: -> $('#new_subscription').submit -> $('input[type=submit]').attr('disabled',true) if $('#card_number').length subscription.processCard() false else true processCard: -> card = {number: $('#card_number').val(),cvc: $('#card_code').val(),expMonth: $('#card_month').val(),expYear: $('#card_year').val()} Stripe.createToken(card,subscription.handleStripeResponse) handleStripeResponse: (status,response) -> if status == 200 $('#subscription_stripe_card_token').val(response.id) $('#new_subscription')[0].submit() else $('#stripe_error').text(response.error.message) $('input[type=submit]').attr('disabled',false) 日志 Started PUT "/subscriptions/5" for 127.0.0.1 at 2014-01-30 01:53:35 -0800 Processing by SubscriptionsController#update as HTML Parameters: {"utf8"=>"?","authenticity_token"=>"ehyUD17CbH7MMOe98s+Kqkh+wGghntWkG4OpoqbnQaA=","subscription"=>{"plan_id"=>"1","user_id"=>"1","stripe_card_token"=>""},"commit"=>"Update My Credit Card","id"=>"5"} User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'xEeu1X6IK9gUAsna9b6Mow' LIMIT 1 Subscription Load (0.5ms) SELECT "subscriptions".* FROM "subscriptions" WHERE "subscriptions"."user_id" = 1 LIMIT 1 Stripe Error: You passed an empty string for 'card'. We assume empty values are an attempt to unset a parameter; however 'card' cannot be unset. You should remove 'card' from your request or supply a non-empty value 解决方法
您可以创建一张新卡并删除旧卡,该卡将为该客户制作新卡default_card,或者您也可以通过更新客户并传递此处提到的卡详细信息(检查卡字段及其子参数)来实现它.
编辑: 像这样做 require "stripe" Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" token = Stripe::Token.create( :card => { :number => "4242424242424242",:cvc => "314" },) cu = Stripe::Customer.retrieve("cus_3Ok02kebTNsPDJ") cu.card = token.id cu.save (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |