Commit 0b6e346582da4cf796df8291aefdc50cb96c992e
1 parent
d0017e7e14
Exists in
master
update info
Showing 1 changed file with 8 additions and 9 deletions Inline Diff
doc/server_document.md
| 1 | 1. 充值通知第三方服务端接口(需提供回调地址) | 1 | 1. 充值通知第三方服务端接口(需提供回调地址) |
| 2 | ----------------------------- | 2 | ----------------------------- |
| 3 | 参数列表: | 3 | 参数列表: |
| 4 | orderId: 订单id | 4 | orderId: parter订单号 |
| 5 | appId: 游戏接入分配appid | 5 | tradId: 平台订单号 |
| 6 | appId: 游戏接入分配appid | ||
| 6 | userId: 平台用户id | 7 | userId: 平台用户id |
| 7 | product: 购买商品名字 | 8 | product: 购买商品名字(50字符) |
| 8 | extraInfo:游戏接入方传入自定义参数,200字符 | 9 | currency: 币种 (目前仅有CNY) |
| 9 | currency:币种 (目前仅有CNY) | 10 | amount: 充值金额(分) |
| 10 | amount:充值金额(分) | ||
| 11 | sig: 签名(算法详见2) | 11 | sig: 签名(算法详见2) |
| 12 | 12 | ||
| 13 | 第三方server端返回值: | 13 | 第三方server端返回值: |
| 14 | 如果第三方验证成功,则返回字符串"success"即可,否则会通知10次后停止. | 14 | 如果第三方验证成功,则返回字符串"success"即可,否则会通知10次后停止.如重复通知,注意校验平台订单号,如重复忽略. |
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 2.签名算法 | 17 | 2.签名算法 |
| 18 | -------------------------------- | 18 | -------------------------------- |
| 19 | 19 | ||
| 20 | 注意:签名参数不能写成固定数量,一定要获取全部参数并且除sig参数外,然后按照字母升序排列。 | 20 | 注意:签名参数不能写成固定数量,一定要获取全部参数并且除sig参数外,然后按照字母升序排列。 |
| 21 | ```java | 21 | ```java |
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | * 签名算法 | 24 | * 签名算法 |
| 25 | * @param request | 25 | * @param request |
| 26 | * @return | 26 | * @return |
| 27 | */ | 27 | */ |
| 28 | public String sig(HttpServletRequest request, String key){ | 28 | public String sig(HttpServletRequest request, String key){ |
| 29 | 29 | ||
| 30 | Enumeration names = request.getParameterNames(); | 30 | Enumeration names = request.getParameterNames(); |
| 31 | SortedSet<String> allParams = Sets.newTreeSet(); | 31 | SortedSet<String> allParams = Sets.newTreeSet(); |
| 32 | 32 | ||
| 33 | while (names.hasMoreElements()) { | 33 | while (names.hasMoreElements()) { |
| 34 | String name = (String) names.nextElement(); | 34 | String name = (String) names.nextElement(); |
| 35 | if (name.equals("sig")) { | 35 | if (name.equals("sig")) { |
| 36 | continue; | 36 | continue; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | try { | 39 | try { |
| 40 | allParams.add(name + "=" + URLEncoder.encode(request.getParameter(name), "utf-8")); | 40 | allParams.add(name + "=" + URLEncoder.encode(request.getParameter(name), "utf-8")); |
| 41 | } catch (UnsupportedEncodingException e) { | 41 | } catch (UnsupportedEncodingException e) { |
| 42 | e.printStackTrace(); | 42 | e.printStackTrace(); |
| 43 | } | 43 | } |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | String params = Joiner.on("&").join(allParams)+key; | 46 | String params = Joiner.on("&").join(allParams)+key; |
| 47 | String computedToken = DigestUtils.md5DigestAsHex(params.getBytes()); | 47 | String computedToken = DigestUtils.md5DigestAsHex(params.getBytes()); |
| 48 | return computedToken; | 48 | return computedToken; |
| 49 | } | 49 | } |
| 50 | ``` | 50 | ``` |
| 51 | 51 | ||
| 52 | 52 | ||
| 53 | 53 | ||
| 54 | 注意:参数是按字母升序排列 akey=value&bkey=value.... + secretkey | 54 | 注意:参数是按字母升序排列 akey=value&bkey=value.... + secretkey |
| 55 |