2014-07-16 17 views
5

Từ các tài liệu Stripe:hoàn API sọc sau khi đăng ký hủy

Khi bạn hủy đăng ký, thẻ của khách hàng sẽ không được sạc một lần nữa, nhưng không có tiền sẽ được hoàn trả hoặc. Nếu bạn muốn phát hành khoản tiền hoàn lại, bạn có thể thực hiện việc này thông qua trang tổng quan của Stripe hoặc qua API .

Tôi đã tạo đăng ký hàng tháng và tôi chỉ muốn hoàn lại số tiền cho số ngày chưa trôi qua trong tháng đăng ký. Làm cách nào tôi có thể hoàn trả lại số tiền từ đăng ký cho những ngày chưa hoàn thành với API Stripe?

+2

Đó là giữa năm 2016 và đó là sọc đáng ngạc nhiên vẫn chưa thực hiện toàn bộ thuê bao vòng đời (đặc biệt là kết thúc của cuộc sống) – DeepSpace101

Trả lời

4

Bạn cần tính toán số tiền hoàn lại và sau đó thực hiện refund API call thành Sọc. Sau khi hoàn lại tiền, bạn sẽ phải thực hiện một cuộc gọi API khác cho Subscription cancellation

3

Nếu bạn muốn để cho phép xử lý tính toán hoàn lại, bạn có thể thay đổi số lượng đăng ký thành 0 rồi hủy gói sau.

+0

Để xây dựng trên thủ thuật này, bạn cần đặt số lượng bằng 0 và sau đó lấy lại hóa đơn sắp tới để nhận số tiền hoàn lại (upcomingInvoice.total * -1). Để phát hành khoản tiền hoàn lại, hãy lấy hóa đơn trả tiền mới nhất (không phải hóa đơn sắp tới) và sử dụng id phí để hoàn lại tiền. – claviska

0

Sau khi nghiên cứu một thời gian, tôi đến dòng này viết bằng JavaScript cho Node.js:

refundAndUnsubscribe = async function() { 
try { 

    // Set proration date to this moment: 
    const proration_date = Math.floor(Date.now()/1000); 

    let sub = await stripe.subscriptions.retrieve("sub_CILnalN9HpvADj"); 

    // See what the next invoice would look like with a plan switch 
    // and proration set: 
    let items = [{ 
     quantity: 0, 
     id: sub.items.data[0].id, 
     plan: "your_plan" // Switch to new plan 
    }]; 


    let invoices = await stripe.invoices.retrieveUpcoming('cus_CIP9dtlq143gq7', 'sub_CILnalN9HpvADj', { 
     subscription_items: items, 
     subscription_proration_date: proration_date 
    }); 

    //List all invoices 
    let payedInvoicesList = await stripe.invoices.list({ 
     customer: 'cus_CIP9dtlq143gq7' 
    }); 

    // Calculate the proration cost: 
    let current_prorations = []; 
    let cost = 0; 
    for (var i = 0; i < invoices.lines.data.length; i++) { 
     let invoice_item = invoices.lines.data[i]; 
     if (invoice_item.period.start == proration_date) { 
      current_prorations.push(invoice_item); 
      cost += invoice_item.amount; 
     } 
    } 

    //create a refund 
    if (cost !== 0) { 
     cost = (cost < 0) ? cost * -1 : cost //A positive integer in cents 

     let refund = await stripe.refunds.create({ 
      charge: payedInvoicesList.data[0].charge, 
      amount: cost 
     }); 
    } 

    // delete subscription 
    return stripe.subscriptions.del('sub_CILnalN9HpvADj'); 

} catch (e) { 
    console.log(e); 
} 

}

Các vấn đề liên quan