无法解析临时密钥,如何发送未修改的 JSON

问题描述

帖子已编辑

我有一个从 Stripe git 存储库复制的 CheckoutViewController,并将其实现到我的应用程序中。起初我试图在不同的 vc 中设置 STPPaymentContext 但它提供了错误的访问但是现在当我尝试在 Checkout vc 中设置它时我收到断言失败说 JSON 不能解析。

这就是我在 Myapiclient 课上的内容

class Myapiclient: NSObject,STPCustomerEphemeralKeyProvider {


let baseURL = "https://us-central1-attend-41f12.cloudfunctions.net/createEphemeralKeys"


let ticketVC: TicketFormViewController = TicketFormViewController()


func createCustomerKey(withAPIVersion apiVersion: String,completion: @escaping STPJSONResponseCompletionBlock) {
    ticketVC.getUseRSStripeCustomerID { (customerid) in
        if let id = customerid {
            let url = URL(string:self.baseURL)!
            var urlComponents = URLComponents(url: url,resolvingAgainstBaseURL: false)!
            urlComponents.queryItems = [URLQueryItem(name: "api_version",value: apiVersion),URLQueryItem(name: "customer_id",value: id)]
            var request = URLRequest(url: urlComponents.url!)
            request.httpMethod = "POST"
            let task = URLSession.shared.dataTask(with: request,completionHandler: { (data,response,error) in
                guard let response = response as? HTTPURLResponse,response.statusCode == 200,let data = data,let json = ((try? JSONSerialization.jsonObject(with: data,options: []) as? [String : Any]) as [String : Any]??) else {
                    completion(nil,error)
                    return
                }
                completion(json,nil)
            })
            task.resume()
        }
    }
}

}

这是我为尝试获取临时密钥而创建的 Cloud Functions 函数

exports.createEphemeralKeys = functions.https.onRequest(async (req,res) => {
var api_version = req.body.api_version;
var customerId = req.body.customer_id;

if (!api_version) {
 res.status(400).end();
 return;
}

let key = await stripe.ephemeralKeys.create(
  { customer: customerId },{ stripe_version: api_version }
 );
 res.json(key);

});

这看起来像是导致问题的原因,我知道这不是 URL,因为我今天早上使用 paymentIntent 云函数进行了另一个 API 调用,它有一个 200 状态代码。我从 Stripe docs 复制了代码并相信它会起作用,但它让我失望。任何建议。

UPDATE 我还检查了 Cloud Functions 服务器日志,该函数正在执行,并显示 400 错误状态代码,所以这绝对是 Cloud Functions 的问题,不是 json 中的exports.createEphemeralKeys 函数已经未修改,我还需要添加什么才能使其工作?

解决方法

经过几天的尝试,我终于得到了 Slack 聊天室成员的帮助。

我去掉了 if 语句,将 stripe_version 改为 apiVersion,因为它已被弃用。

exports.createEphemeralKeys = functions.https.onRequest(async (req,res) => {
var api_version = req.query.api_version;
var customerId = req.query.customer_id;

const key = await stripe.ephemeralKeys.create(
  { customer: customerId },{ apiVersion: api_version}
);
res.json(key);

});

我也将 req.body 更改为 req.query。现在 JSON 会打印在控制台中,但我还有很多事情需要弄清楚。