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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
