天天看點

Webhooks 通知接收處理

以struts2中的寫法為例,可自行用其他架構或servlet。

<code>public</code> <code>String wxNotice() </code><code>throws</code> <code>IOException{</code>

<code>        </code><code>HttpServletResponse response = ServletActionContext.getResponse();</code>

<code>        </code><code>HttpServletRequest request = ServletActionContext.getRequest();</code>

<code>        </code><code>// -------接受參數-------------------------------------//</code>

<code>        </code><code>StringBuilder buffer = </code><code>new</code> <code>StringBuilder();</code>

<code>        </code><code>BufferedReader reader = request.getReader();</code>

<code>        </code><code>String line;</code>

<code>        </code><code>while</code> <code>((line = reader.readLine()) != </code><code>null</code><code>) {</code>

<code>            </code><code>buffer.append(line);</code>

<code>        </code><code>}</code>

<code>        </code><code>String requestBody = buffer.toString();</code>

<code>        </code><code>System.out.println(</code><code>"request boay:"</code><code>+ requestBody);</code>

<code>        </code><code>// -------簽名驗證-------------------------------------//</code>

<code>        </code><code>String sign = request.getHeader(</code><code>"sign"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"header sign:"</code> <code>+ sign);</code>

<code>        </code><code>boolean</code> <code>signCheck = RSA.verify(requestBody, sign, SignConfig.PAYMAX_PUBLIC_KEY);</code><code>//簽名規則根據你的項目來定</code>

<code>        </code><code>//-------處理狀态傳回-----------------------------------//</code>

<code>        </code><code>response.setContentType(</code><code>"text/html;charset=UTF-8"</code><code>);</code>

<code>        </code><code>response.setCharacterEncoding(</code><code>"UTF-8"</code><code>);</code><code>//防止輸出的資訊出現亂碼</code>

<code>        </code><code>PrintWriter out = </code><code>null</code><code>;</code>

<code>        </code><code>out = response.getWriter();</code>

<code>        </code><code>if</code> <code>(!signCheck) {</code>

<code>            </code><code>//簽名驗證失敗</code>

<code>            </code><code>out.print(</code><code>"fail"</code><code>);</code>

<code>        </code><code>}</code><code>else</code><code>{</code>

<code>            </code><code>out.print(</code><code>"success"</code><code>);</code>

<code>        </code><code>out.flush();</code>

<code>        </code><code>out.close();</code>

<code>        </code><code>return</code> <code>null</code><code>;</code>

<code>    </code><code>}</code>

本文轉自 藝晨光 51CTO部落格,原文連結:http://blog.51cto.com/ycgit/1940886,如需轉載請自行聯系原作者

繼續閱讀