linqing.he | 2e2edb5 | 2021-04-25 15:24:19 +0800 | [diff] [blame^] | 1 | --- |
| 2 | title: 一卡通v5二维码身份识别接口 |
| 3 | date: 2018-10-14 |
| 4 | tags: |
| 5 | |
| 6 | --- |
| 7 | |
| 8 | ## 1.1文档说明 ## |
| 9 | |
| 10 | 本文档用于描述了一卡通二维码身份识别接口,供第三方系统(前置和应用)对接参考。 |
| 11 | |
| 12 | ## 1.2约定 ## |
| 13 | |
| 14 | 1. 传输编码统一为utf-8 |
| 15 | 2. RSA 加密算法为本接口采用的非对称加密算法,`SIGN_ALGORITHMS ="SHA1WithRSA"`; |
| 16 | 3. RSA公钥由本系统提供,本系统返回信息的签名数据,第三方系统得到后通过公钥校验算法,验证返回数据的合法性 |
| 17 | 4. HMAC加密算法为用户请求本系统采用的加密算法,`SIGN_ALGORITHMS ="HMAC-SHA1"`; |
| 18 | 5. 具体签名生成参考后面的签名章节 |
| 19 | 6. retcode等于0表示成功,非0表示失败,失败具体信息查看retmsg |
| 20 | |
| 21 | |
| 22 | ## 2.1 二维码身份识别 ## |
| 23 | |
| 24 | **请求URL:** |
| 25 | |
| 26 | - `https://ip:port/epayapi/services/thirdparty/common/qrcodecertification` |
| 27 | |
| 28 | **请求方式/格式:** |
| 29 | |
| 30 | - POST |
| 31 | - application/x-www-form-urlencoded |
| 32 | |
| 33 | **请求参数:** |
| 34 | |
| 35 | |参数名 | 类型 | 必选 | 说明 | |
| 36 | |-----|------|-----|------| |
| 37 | |partner_id|String|是 |本系统分配给各个接入应用的合作伙伴id号| |
| 38 | |qrcode|String|是 |二维码| |
| 39 | |timestamp|String|是|时间戳格式为yyyyMMddhh24miss| |
| 40 | |sign|String|是| 签名| |
| 41 | |sign_method|String|是|参数的加密方法选择,可选值是:HMAC 加密方式为HAMC-SHA1| |
| 42 | |
| 43 | **请求内容示例:** |
| 44 | ```html |
| 45 | URI:https://ip:port/epayapi/services/thirdparty/common/qrcodecertification |
| 46 | |
| 47 | partner_id:10000 |
| 48 | qrcode:GcS2nsBRzhW72lQgcGdI6s64YSaaWnxlWtIiUSYrPCTzHH0cKkah0HFnr13ejXSL7vkAAQnuwXhoEwNZ11VsVslq95QxqCOisItFJnC1BTg7ZN23cIw1yYyeB2keMICo8FUDkpuUmEY= |
| 49 | timestamp:20150119130901 |
| 50 | sign:5195f9b9116e4adf67eeebc9935d33dc683f677d |
| 51 | sign_method:HMAC |
| 52 | ``` |
| 53 | |
| 54 | **返回示例:** |
| 55 | |
| 56 | - 成功 |
| 57 | |
| 58 | ```json |
| 59 | { |
| 60 | "retcode":"0", |
| 61 | "retmsg":"query success", |
| 62 | "stuempno":"09893092", |
| 63 | "expiredate":"20191010", |
| 64 | "sign_method":"HMAC", |
| 65 | “sign”:5195f9b9116e4adf67eeebc9935d33dc683f677d |
| 66 | } |
| 67 | |
| 68 | ``` |
| 69 | |
| 70 | - 失败 |
| 71 | |
| 72 | ```json |
| 73 | { |
| 74 | "retcode":"1", |
| 75 | "retmsg":"account not exsit" |
| 76 | } |
| 77 | |
| 78 | ``` |
| 79 | |
| 80 | **返回参数说明:** |
| 81 | |
| 82 | |参数名 | 类型 | 说明 | |
| 83 | |-----|-----|------| |
| 84 | |retcode|String|返回码(0=成功,其他为失败)| |
| 85 | |retmsg|String|返回消息| |
| 86 | |stuempno|String|学号| |
| 87 | |expiredate|String|有效期| |
| 88 | |sign|String|签名,与请求方式签名方式相同| |
| 89 | |
| 90 | ## 附录A-用户请求HMAC签名算法 ## |
| 91 | |
| 92 | |
| 93 | - 签名方式:`hmac-sha1` |
| 94 | |
| 95 | - 签名密钥由本系统统一线下提供 |
| 96 | |
| 97 | |
| 98 | - **签名校验的通用步骤如下:** |
| 99 | |
| 100 | **第一步,**设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 |
| 101 | |
| 102 | > 假设传送的参数如下: |
| 103 | |
| 104 | |
| 105 | ``` |
| 106 | partner_id:10000 |
| 107 | qrcode:cS2nsBRzhW72lQgcGdI6s64YSaaWnxlWtIiUSYrPCTzHH0cKkah0HFnr13ejXSL7vkAAQnuwXhoEwNZ11VsVslq95QxqCOisItFJnC1BTg7ZN23cIw1yYyeB2keMICo8FUDkpuUmEY= |
| 108 | timestamp:20150119130901 |
| 109 | sign:5195f9b9116e4adf67eeebc9935d33dc683f677d |
| 110 | sign_method:HMAC |
| 111 | ``` |
| 112 | > 对参数按照key=value的格式,并按照参数名ASCII字典序排序如下: |
| 113 | |
| 114 | |
| 115 | ``` |
| 116 | partner_id=10000&qrcode=cS2nsBRzhW72lQgcGdI6s64YSaaWnxlWtIiUSYrPCTzHH0cKkah0HFnr13ejXSL7vkAAQnuwXhoEwNZ11VsVslq95QxqCOisItFJnC1BTg7ZN23cIw1yYyeB2keMICo8FUDkpuUmEY=&sign_method=HMAC×tamp=20150119130901 |
| 117 | ``` |
| 118 | |
| 119 | **特别注意以下重要规则:** |
| 120 | |
| 121 | |
| 122 | - 参数名ASCII码从小到大排序(字典序); |
| 123 | |
| 124 | |
| 125 | - 如果参数的值为空不参与签名; |
| 126 | |
| 127 | |
| 128 | - 参数名区分大小写; |
| 129 | |
| 130 | |
| 131 | - 传送的sign参数不参与签名,用该sign值作校验。 |
| 132 | |
| 133 | **第二步,**用密钥secretkey对stringA字符串,进行hmac-sha1签名,得到sign值signValue。signValue最后采用十六进制小写hex编码生成签名字符串。 |