文档管理中心

此版本文档已归档不再维护,推荐您使用最新版本

指南游戏服务相关参考对掉单数据验签

对掉单数据验签

应用外商品支付发生掉单情况时,应用客户端需要在启动时主动查询未发货订单并及时通知应用服务端重新发货,在查询到未发货订单时需要对订单中的签名字符串进行验签。

  1. 获取需要验签的签名字符串,即ProductOrderInfo.getSign()的值。

    获取参与签名的参数名与参数值,如下表所示。

    展开

    参数名

    参数值

    appId

    当前应用的应用ID,获取方法参考查询应用信息

    productNo

    商品ID,调用ProductOrderInfo.getProductNo()获取。

    orderId

    支付订单ID,调用ProductOrderInfo.getOrderId()获取。

    tradeId

    华为服务器记录的业务订单ID,调用ProductOrderInfo.getTradeId()获取。

  2. 将参与签名的参数,按参数名首字母的ASCII码将参数升序排序,并将参数名和参数值的键值对以“&”字符连接成字符串,例如“appId=xxxxxx&productNo=xxxxxxx&orderId=xxxxxxxxxxx&tradeId=xxxxxxxx”

  3. 使用验签公钥对待验签字符串和签名字符串进行验证。

说明:
验签公钥的查询方法参见获取验签公钥

     JAVA示例代码如下:

收起
自动换行
深色代码主题
复制
  1. /** *校验签名信息  
  2. * @param content 待验签字符串  
  3. * @param sign 签名字符串  
  4. * @param publicKey 验签公钥  
  5. * @param是否校验通过  
  6. */
  7. public static boolean doCheck(String content, String sign, String publicKey) {
  8.   try {
  9.      KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  10.      byte[] encodedKey = decoder.decode(publicKey);
  11.      PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
  12.      java.security.Signature signature = null;
  13.      signature = java.security.Signature.getInstance(SIGN_ALGORITHMS256);
  14.      signature.initVerify(pubKey);
  15.      signature.update(content.getBytes("utf-8"));
  16.      boolean bverify = signature.verify(decoder.decode(sign));
  17.      return bverify;
  18.   } catch (Exception e) {
  19.      e.printStackTrace();
  20.   }
  21.   return false;
  22. }
本页面可能包含由第三方许可的内容,请参考具体描述
在 指南 中进行搜索
请输入您想要搜索的关键词