• url增加签名验证防窜改


    学习给API加上签名加密验证功能,摘抄了腾讯支付的说明书文档

    ————————————————————————————————————————————————————————————————

    为了提高传输过程参数的防篡改性,必须使用签名参数sig。

    1. 签名参数sig生成的步骤

    第1步: 把需要包含在签名中的参数按key升序排序。 具体需要包含哪些参数,见各接口参数说明中关于sig的描述。
    第2步: 把排序后的key和它对应的value拼接成一个字符串。
    第3步: 把分配给商家的appkey拼接在第2步得到的字符串后面。
    第4步: 计算第3步字符串的md5值,使用md5值的16进制字符串作为sig的内容。
    2. 示例
    原始请求信息
    应用ID:appid=600
    商户appkey=4dd1af55f7f140ac8827518472af3d87
    原始请求:
    http://openapi.pengyou.qq.com/v2/r/qzone/qz_get_balance?
    appid=600&
    appkey=HWAffC6MK1DQ5ztm&
    appname=app600&
    device=0&
    openid=00000000000000000000000000000009&
    openkey=1111111111446414117133E71111111111C50AE4A7111111&
    ts=1300444184&
    userip=112.90.139.30
    查询时需要包含在签名里的参数:appid,appkey,appname,openid,openkey,ts。
    下面开始生成sig:
    第1步: 将参数按key升序排序
    得到:appid,appkey,appname,openid,openkey,ts

    第2步: 把所有键值对字符串拼接成一个字符串得到:
    appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
    openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184

    第3步: 把分配给商家的appkey拼接在第2步骤得到的字符串后面得到:
    appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
    openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184
    HWAffC6MK1DQ5ztm

    第4步: 计算第3步骤字符串的md5值
    md5
    (appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
    openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184
    HWAffC6MK1DQ5ztm)
    得到:
    sig=eddf71eaa362748beda2cca96a4786ff

    加签名后的请求串
    http://openapi.pengyou.qq.com/v2/r/qzone/qz_get_balance?
    appid=600&
    appkey=HWAffC6MK1DQ5ztm&
    appname=app600&
    device=0&
    openid=00000000000000000000000000000009&
    openkey=1111111111446414117133E71111111111C50AE4A7111111&
    ts=1300444184&
    userip=112.90.139.30&
    sig=4d7c026abf32d84cc8afb9f36d365e28

    FAQ

    1. 为什么总是返回“1000:请求参数数错误”?

    2. 生成sig的时候:
      (1)第一步中,把device也作为签名的因子了。注意sig生成时具体需要包含哪些参数,见各接口参数说明中关于sig的描述。
      (2)第二步中,拼接字符串时,没有将key排序后,再进行key-value字符串拼接。
      (3)第二步中,拼接字符串时,把‘=’,‘&’也放签名原串里面了。注意只拼接key和它对应的value。
      建议开发者按照API接口示例中的HTTP请求源串自行生成sig,然后和示例中的sig进行比对,如果不同,说明生成过程有误,请按步骤仔细检查,重新生成。

    3. 测试环境和正式环境下OpenAPI的IP地址是不一样的,测试联调的IP是119.147.19.43,不要联调到正式环境上。

    4. 如果上述原因都排除,还是出现请求参数错误,请联系腾讯社区开放平台服务团队的支付API技术支持人员,提供同一次请求里面的信息:
      (1)HTTP请求源串。
      (2)实现签名时,做md5前的原串和md5后的签名。

    5. 如果参数中包含URI非法字符,是应该先做urlencode,还是先生成签名?
      服务后台会先对请求包进行URL解码,再对解码后的sig进行校验,因此请先按照上面的步骤生成sig签名值,然后再对请求进行urlencode。

  • 相关阅读:
    java爬虫(jsoup)
    python之模块分类(六)
    Python之模块分类(五)
    python之模块分类(四)
    python之模块分类(三)
    Linux系统引导过程
    python之模块分类(二)
    linux 进程管理
    python之模块分类(一)
    python基础之模块导入
  • 原文地址:https://www.cnblogs.com/encode/p/6003136.html
Copyright © 2020-2023  润新知