智能客服
你问我答,随时在线为你解决问题

























此版本文档已归档不再维护,推荐您使用最新版本。
应用外商品支付发生掉单情况时,应用客户端需要在启动时主动查询未发货订单并及时通知应用服务端重新发货,在查询到未发货订单时需要对订单中的签名字符串进行验签。
获取需要验签的签名字符串,即ProductOrderInfo.getSign()的值。
获取参与签名的参数名与参数值,如下表所示。
参数名 | 参数值 |
appId | 当前应用的应用ID,获取方法参考查询应用信息。 |
productNo | 商品ID,调用ProductOrderInfo.getProductNo()获取。 |
orderId | 支付订单ID,调用ProductOrderInfo.getOrderId()获取。 |
tradeId | 华为服务器记录的业务订单ID,调用ProductOrderInfo.getTradeId()获取。 |
将参与签名的参数,按参数名首字母的ASCII码将参数升序排序,并将参数名和参数值的键值对以“&”字符连接成字符串,例如“appId=xxxxxx&productNo=xxxxxxx&orderId=xxxxxxxxxxx&tradeId=xxxxxxxx”
使用验签公钥对待验签字符串和签名字符串进行验证。
JAVA示例代码如下:
- /** *校验签名信息
- * @param content 待验签字符串
- * @param sign 签名字符串
- * @param publicKey 验签公钥
- * @param是否校验通过
- */
- public static boolean doCheck(String content, String sign, String publicKey) {
- try {
- KeyFactory keyFactory = KeyFactory.getInstance("RSA");
- byte[] encodedKey = decoder.decode(publicKey);
- PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
- java.security.Signature signature = null;
- signature = java.security.Signature.getInstance(SIGN_ALGORITHMS256);
- signature.initVerify(pubKey);
- signature.update(content.getBytes("utf-8"));
- boolean bverify = signature.verify(decoder.decode(sign));
- return bverify;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功