我终于想出了如何使用这个
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。