【问题标题】:Charging through Stripe for iOS通过 Stripe for iOS 充电
【发布时间】:2017-12-26 17:08:39
【问题描述】:

我无法通过 Stripe 向用户收费。我在以下委托方法中收到的 paymentResult 对象

func paymentContext(_ paymentContext: STPPaymentContext, didCreatePaymentResult paymentResult: STPPaymentResult, completion: @escaping STPErrorBlock) {

}

是一个 STPCard 对象,但根据文档来完成我的后端收费,我需要一个 STPToken。我试过使用

STPAPIClient.shared().createToken(withCard: card) {}

使用收到的 STPCard 对象创建 STPToken,但我收到一条错误消息,提示卡参数没有所需的变量“数字”。有谁知道可能发生了什么,或者是否有办法只用 STPCard 对象完成收费?谢谢。

【问题讨论】:

    标签: ios swift stripe-payments


    【解决方案1】:

    在 STPPaymentContext 对其委托调用 didCreatePaymentResult 时,令牌已经创建,因此无需尝试创建第二个令牌。我会看一下示例 iOS 后端,它与 Stripe SDK 中的“标准”示例应用程序一起使用:

    https://github.com/stripe/example-ios-backend

    【讨论】:

    • 感谢您的回复。这个令牌在哪里?我在 STPPaymentContext 或 STPPaymentResult 中都找不到它。会不会先存到后端,然后后端收费?
    【解决方案2】:

    如果您使用卡中的stripe id 而不是token,则需要包含客户对象,请参阅How to use Stripe and Apple Pay in iOS

    下面是如何在 Go 中处理它

    package main
    
    import (
        "net"
        "encoding/json"
        "fmt"
        "net/http"
        "log"
        "os"
        "github.com/stripe/stripe-go/charge"
    )
    
    func main() {
        stripe.Key = "sk_test_mM2MkqO61n7vvbVRfeYmBgWm00Si2PtWab"
    
        http.HandleFunc("/request_charge", handleCharge)
        if err := http.ListenAndServe(":8080", nil); err != nil {
            panic(err)
        }
    }
    
    var customerId = "cus_Eys6aeP5xR89ab"
    
    type PaymentResult struct {
        StripeId string `json:"stripe_id"`
    }
    
    func handleCharge(w http.ResponseWriter, r *http.Request) {
        decoder := json.NewDecoder(r.Body)
        var t PaymentResult
        err := decoder.Decode(&t)
        if err != nil {
            panic(err)
        }
    
        params := &stripe.ChargeParams{
            Amount:      stripe.Int64(150),
            Currency:    stripe.String(string(stripe.CurrencyUSD)),
            Description: stripe.String("Charge from my Go backend"),
            Customer: stripe.String(customerId),
        }
    
        params.SetSource(t.StripeId)
        ch, err := charge.New(params)
        if err != nil {
            fmt.Fprintf(w, "Could not process payment: %v", err)
            fmt.Println(ch)
            w.WriteHeader(400)
        }
    
        w.WriteHeader(200)
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2015-01-15
      • 1970-01-01
      • 2021-11-28
      • 2013-03-06
      • 1970-01-01
      • 2018-08-15
      • 2016-11-17
      • 2020-11-15
      相关资源
      最近更新 更多