使用RoyalPay SDK时JSON解析错误:语法错误,期望{,实际错误,pos 0,fastjson-version 1.2.57

问题描述 投票:2回答:1

我正在尝试使用RoyalPay SDK创建订单并进行支付宝付款。响应代码是200,但我无法解析JSON作为响应。

我该如何解决这个问题?

我创建api请求的代码:

    interface RoyalPayApi {

    @FormUrlEncoded
    @Headers("Accept: application/json", "Content-Type: application/json")
    @PUT("/api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id}")
    fun createRoyalPaySDKOrder(@Path(value = "partner_code", encoded = true) partner_code: String, @Path(value = "order_id", encoded = true) order_id: String,
                               @Query("time") time: Long, @Query("nonce_str") nonce_str: String, @Query("sign") sign: String,
                               @Field("description") description: String,
                               @Field("price") price: Int,
                               @Field("currency") currency: String,
                               @Field("channel") channel: String,
                               @Field("operator") operator: String,
                               @Field("system") system: String): Call<JSONObject> // com.alibaba.fastjson.JSONObject
}

代码我得到改造服务:

fun createService(): RoyalPayApi {
        val retrofit = Retrofit.Builder()
        .baseUrl(ROYAL_PAY_ADDRESS)
        .addConverterFactory(FastJsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()

    return retrofit.create(RoyalPayApi::class.java)
}

我发送请求和接收响应的代码:

 var api = createService()
    var call = api.createRoyalPaySDKOrder(ROYAL_PAY_PARTNER_CODE, order_id, time, ROYAL_PAY_NONCE_STR, sign,
        description, price, "AUD", channel, "kate", "android")

    call.enqueue(object : Callback<JSONObject>{
        override fun onResponse(call: Call<JSONObject>, response: Response<JSONObject>) {
            val str = ""
        }

        override fun onFailure(call: Call<JSONObject>, t: Throwable) {
            val str = ""
        }
    })

这是我收到的回复:

enter image description here

这是响应主体(这里的中文不应该影响理解):

enter image description here

这包括原始响应(使用com.google.gson.JsonObject):

enter image description here

使用com.alibaba.fastjson.JSONObject enter image description here的原始响应

如果将JSONObject更改为String,则只返回错误的String版本:(:enter image description here

kotlin fastjson
1个回答
0
投票

服务器期待JSON Body请求。您使用@Field注释数据,这将导致请求形成为queryString。

即您的请求正文将如下所示:

description=foo&price=123...

而不是这个:

{
    "description": "foo",
    "price": 123,
    ...
}

要达到你想要的效果,请查看this question here。第一个答案直接与Java对象一起使用,但如果您不想使用自定义类,也可以使用第二个答案。

© www.soinside.com 2019 - 2024. All rights reserved.