流星和条纹API新手我试图使用流星和条纹来应用此优惠券代码。这是一次性付款优惠券。然而,handleCharge方法在进程支付方法之前触发。我希望Stripe.coupons.retrieve在处理付款之前先返回结果。
服务器方法
Meteor.methods({
processPayment( charge, coupon ) {
Stripe.coupons.retrieve(
coupon,
function(err, result) {
if( result ) {
charge.amount = parseInt(charge.amount) - parseInt( charge.amount * coupon.percent_off );
}
}
);
let handleCharge = Meteor.wrapAsync( Stripe.charges.create, Stripe.charges ),
payment = handleCharge( charge );
return payment;
}
});
我还尝试在将优惠券传递给processPayment之前返回结果。然后,当我尝试console.log时,结果总是未定义。
checkForCoupon( couponCode ) {
let result = false;
Stripe.coupons.retrieve(
couponCode,
function(err, coupon) {
if( err ) {
result = false;
} else {
result = true;
}
}
);
return result;
}
Meteor.call( 'checkForCoupon', coupon, ( error, response ) => {
if ( error ) {
console.log( error );
} else {
console.log( "Success");
}
});
非常感谢任何帮助。
答案 0 :(得分:0)
好的这里有一个问题,条纹api中的优惠券键的参数需要一个看起来像你已经拥有的字符串,因为你在coupons.retrieve api中传递了它,所以你从这个api得到的是优惠券对象,这是没用到你。所以通常在Stripe中我们在创建订阅之前已经有优惠券ID,它在Stripe API中传递以获得折扣。
但正如你所说,在运行另一种方法之前遇到响应问题,所以我建议你使用meteor的Async.runSync。
另一件事是你不能使用优惠券。创建api,它用于订阅。所以这就是我的订阅方式:
在这里,我从coupon_id中搜索优惠券对象,然后点击订阅API。
在客户端:
var data = {
source: "source",
plan: "plan"
}
Meteor.call('processPayment', data, function(err, res) {
if(err)
return;
console.log("Subscription added with coupon");
});
在服务器上:
Meteor.methods({
var coupon;
'processPayment': function(data) {
check( data, {
source: String,
plan: String
});
Async.runSync(function(done) {
var coupon = Stripe.coupons.retrieve("coupon_id", function(err, coupon) {
if(err) {
return done(null); //done is callback
}
return done(null, coupon);
});
});
//this code will only run when coupon async block is completed
if(coupon !== null) {
data.coupon = coupon.id;
}
var subscription = Async.runSync(function(done) {
Stripe.subscriptions.create(data, function(err, subscription) {
if(err) {
console.log(err);
return done(null, err);
}
return done(null, subscription);
}
);
});
return subscription;
}
});
希望这对您有所帮助,并随意在评论中提出任何问题,我将非常乐意回答。