背景
PaymentProvider类和规范,如下所示.题
如何使测试付款失败?(例如,卡被拒绝,或者卡在未来的订阅付款中过期)
Stripe会让我使用特殊的卡号进行此操作,但Paymill 似乎没有任何此类文档(英文).
payment_provider.rb
class PaymentProvider
Paymill.api_key = ENV['PAYMILL_PRIVATE_KEY']
def self.start_new_subscription(email, description, token)
offer = Paymill::Offer.find(ENV['PAYMILL_OFFER_ID'])
client = Paymill::Client.create(email: email, description: description)
payment = Paymill::Payment.create(token: token, client: client.id)
subscription = Paymill::Subscription.create(client: client.id, offer: offer.id, payment: payment.id)
subscription.id
end
end
Run Code Online (Sandbox Code Playgroud)
require 'spec_helper'
describe PaymentProvider do
describe "#start_new_subscription" do
it "returns a subscription id, starting 'sub_' when successful" do
email = "mike@mike.com"
description = "me"
token = get_payment_token …Run Code Online (Sandbox Code Playgroud) 我需要向Paymill付款,我希望能够使用Ruby语言实现这一目标.
更新:
我在github上公开发布了paymill_on_rails.这是一个基于Rails 4.0.0和paymill-ruby的Paymill订阅系统,运行在ruby-2.0.0-p247上
另见家庭项目
Heroku上还部署了一个示例应用程序.请随意分叉并最终做出贡献.
我正在使用 Paymill 创建支付网关(与 Stripe 相当)。我希望我的网站能够自动对基于订阅的账单做出反应。这就是我考虑 Paymill webhook 的原因。
我正处于测试阶段,因此在本地主机(XAMPP)上。因此,接收 Webhook 脚本将具有以下 URL:
localhost/paymill-example-php-subscriptions-master/src/Paymill/LlamaKisses/Controllers/WebhooksController.php.
Run Code Online (Sandbox Code Playgroud)
但是是否可以将 localhost 地址设置为 webhook url(以及如何设置)?
(顺便说一句,WebhooksController.php是不是缺少这样的响应代码行:
http_response_code(200);
Run Code Online (Sandbox Code Playgroud)
让发送 webhook 知道它已成功并且无需重试?)
提前谢谢了!
我使用3D安全支付Paymill API:
paymill.createToken(params, paymillResponseHandler, tdsInit, tdsCleanup);
Run Code Online (Sandbox Code Playgroud)
文档中的这部分完全不起作用:
var tdsInit = function(iframeUrl, cancelFn) {
var body = document.body || document.getElementsByTagName('body')[0];
var iframe = document.createElement('iframe');
iframe.id = 'tdsIframe';
iframe.src = iframeUrl;
iframe.width = 600;
iframe.height = 500;
iframe.style.zIndex = 0xffffffff;
iframe.style.background = '#fff';
iframe.style.position = 'absolute';
body.insertBefore(iframe, body.firstChild);
};
Run Code Online (Sandbox Code Playgroud)
所以我这样做:
function tdsInit(iframeUrl, cancelFn) {
var body = document.body;
var div3D = document.createElement("div");
div3D.id = "div3Dsecure";
body.insertBefore(div3D, body.firstChild);
var pareq = decodeURIComponent(iframeUrl.params.PaReq.replace(/\+/g, " "));
var termurl = decodeURIComponent(iframeUrl.params.TermUrl.replace(/\+/g, " "));
div3D.innerHTML='.$dot.'<form id="3Dsecureform" action="'.$dot.'+iframeUrl.url+'.$dot.'" …Run Code Online (Sandbox Code Playgroud)