⚙️
API Explorer
  • Overview
  • API Reference
    • 交易
      • Sessiontoken
      • customer
      • Payment methods
      • Confirm charge
      • Checkout payment
      • Local payment
    • 授权交易完成/撤销
      • Authorization
    • 拒付
    • 退款
    • 物流
    • 交易查询
    • 网关绑定支付通道查询
    • 结算明细查询
    • 风控-来源网址查询
  • Webhook
    • 概述
    • 交易事件
    • 预授权事件
    • 退款事件
    • 拒付事件
    • 支付结果跳转
  • 附录
    • 数据签名过程
    • 测试账号信息
    • 常见错误码
    • 常见问题
    • 旧版API文档
Powered by GitBook
On this page
  • 请求或响应问题
  • 1,参数值乱码或缺失
  • 2,签名问题
  • 异常提示
  1. 附录

常见问题

常见问题

Previous常见错误码

Last updated 3 years ago

请求或响应问题

1,参数值乱码或缺失

检查是否UTF-8编码

//以HttpClient为例
//a: 一般Get请求默认为此类型
import org.apache.http.client.methods.HttpGet;
httpGet.setHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

//或者b: post方式设置body格式为json
import org.apache.http.client.methods.HttpPost;
httpPost.setHeader("Content-Type","application/json;charset=UTF-8");

//c: 同时设置可能会报错,本文档也并无Post方式接口同时传递query参数和body参数

是否对请求参数进行encode

当发送get请求(或类似post请求:url?key=中文和特殊符号),即本文档中所指的,由于参数实际是以拼接在url后方的方式进行参数传递的,如果不对中文或非ascii字符进行urlEncode,则会出现参数值乱码或丢失的情况。此时可对参数值进行urlEncode后,再进行参数设置并发送请求。

//以HttpClient为例
// 传入的query参数
Map<String,String> queryParamMap ...;
//开始设置http请求参数
List<NameValuePair> param = new ArrayList<>();
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
    param.add(new BasicNameValuePair(entry.getKey(),entry.getValue()) );
}
httpPost.setEntity(new UrlEncodedFormEntity(param, StandardCharsets.UTF_8));

//当传入的是body参数时
httpPost.setEntity(
    new StringEntity(json, 
        ContentType.create("application/json", StandardCharsets.UTF_8)));

结果解析时,是否设定为UTF-8编码

收到服务端结果时,Header部分一般为数字或英文字符组成,不会出现乱码。body部分请使用UTF-8编码进行接收。

//http response
String result = EntityUtils.toString(response.getEntity(),StandardCharsets.UTF_8);

2,签名问题

1,打印或手工拼接出签名校验不通过的请求的签名内容字符串,使用工具进行HMAC-SHA256签名,比较和发送请求时的签名是否一致,核对签名算法本身

2,检查是否存在上方参数值乱码或缺失的问题,导致发送端的签名内容和服务端接收到的报文内容有差异,注意如果是对参数值以及body数据体,不是encode转码后的值进行签名

3,签名key是否正确

异常提示

2,对照,检查签名内容字符串是否拼接无误,是否多了空值或空对象:'' "" {} 之类的,又是否有换行符的差异,如:\n \r\n

query参数
签名步骤