您好,使用您例子运行 chsPay/do6202 接口时,出现【6202】返回数据:{"code":360002,"success":false,"message":"040请求报文签名验证失败-20240925182638-8ad383a917634712af499d9c11166624请求报文签名验证失败"}
目前得知文档里提到的验签标准表述如下:
2.3.1.1概述
根据SM2算法(Signature的algorithm选择SM3withSM2),签名报文。通过对报文数据筛选、排序和拼接,组成待签名报文数据。
2.3.1.2请求参数签名
2.3.1.2.1筛选
获取所有请求参数,不包括字节类型参数,如文件、字节流,剔除signData、encData、extra字段。
2.3.1.2.2排序
将筛选的参数按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。
2.3.1.2.3拼接
将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,最后拼接上应用密钥appSecret在“…参数=参数值…”后,此时生成的字符串为待签名字符串,将待签名字符串SM2运算,即是签名(signData)的值(“signData”、“encData”、“extra”参数不参与签名)。
JOSN对象签名规范(如data):内部按字母顺序升序排列空值不参与签名 将整理好的JSON内容,输出JSON字符串后拼接参与签名,例如下面的示例请求报文,参数值都是示例,开发者仅参考报文格式即可。
加签报文示例:
{
"appId":"43AF047BBA47FC8A1AE8EFB2XXXXXXXX",
"data":{"appId":"43AF047BBA47FC8A1AE8EFB2XXXXXXXX","appUserId":"o8z4C5avQXqC0aWFPf1Mzu6D7WCQ_bd","idNo":"350181199011193519","idType":"01","phoneNumber":"13763873033","userName":"测试"},
"encType":"SM4",
"signData":"URVQNdVNn5mz2EhKZhLTlXNwAWTSncFoSe8Ilx7jhn81eABJ46sdRRN1ZiAiQjPUTixG9bwqEhiJupHRGmyO5w==",
"signType":"SM2",
"timestamp":"20200207175759",
"version":"2.0.1"
}
组成的待签名字符串:
appId=43AF047BBA47FC8A1AE8EFB2XXXXXXXX&data={"appId":"43AF047BBA47FC8A1AE8EFB2XXXXXXXX","appUserId":"o8z4C5avQXqC0aWFPf1Mzu6D7WCQ_bd","idNo":"350181199011193519","idType":"01","phoneNumber":"13763873033","userName":"测试"}
&encType=SM4&signType=SM2×tamp=20200207175759&version=2.0.1&key=4117E877F5FA0A0188891283E4B617D5
2.3.1.2.4签名结果
使用各自语言对应的SM2签名函数,对拼接得出的待签名字符串使用私钥进行SM2签名后,再将字节码进行Base64编码,即是签名结果,如签名结果。
签名结果示例:
URVQNdVNn5mz2EhKZhLTlXNwAWTSncFoSe8Ilx7jhn81eABJ46sdRRN1ZiAiQjPUTixG9bwqEhiJupHRGmyO5w=
请问 SM2Util.sign 方法是否需要改进,或者您有什么修改建议?
如果签名错误,就这个接口的文档加密方式是不是这样。医保接口的调用是有两套请求签名加密方案,需要根据医保平台提供的接口文档进行确认。具体哪个接口使用哪种签名加密方案,我也是很早之前做过对接医保,核心就是根据文档来,还有就是有一些坑可以在医保对接QQ群中找到。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论