微信支付,异步通知
来源:互联网 发布:求二叉树的深度java 编辑:程序博客网 时间:2024/05/22 14:01
微信公众号配置共五个地方:
1、设置key:微信商户平台——账户设置——API安全——密钥设置
2、页面授权域名:用来过的openID,公众号设置——功能设置——设置【网页授权域名】(【js安全域名】【业务域名】也一并设置了吧)
3、设置支付目录:微信支付——公众号支付——设置支付目录
4、配置回调信息:开发——基本配置
5、设置管理员:设置——安全中心
支付的话,设置红字的配置即可
package com.wxpay.servlet;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import javax.servlet.ServletException;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.wxpay.WxPayUtil;/** * 微信支付,工具类 * * @author muyunfei * *<p>Modification History:</p> *<p>AuthorDescription</p> *<p>------------------------------------------------------------------</p> *<p>muyunfei牟云飞新建</p> */public class WxNotifyAction extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {try{//获取支付宝POST过来反馈信息Map<String,String> params = new HashMap<String,String>();// post请求的密文数据// sReqData = HttpUtils.PostData();ServletInputStream in = req.getInputStream();BufferedReader reader =new BufferedReader(new InputStreamReader(in));String sReqData="";String itemStr="";//作为输出字符串的临时串,用于判断是否读取完毕while(null!=(itemStr=reader.readLine())){sReqData+=itemStr;}//---- 待修改,可以在这里写一个log日志文件,记录相应信息System.out.println(sReqData);//---- 待修改,结束//解析数据Map<String, Object> map = WxPayUtil.getMapFromXML(sReqData);////打印接收信息//Iterator iterator = map.entrySet().iterator(); // while (iterator.hasNext()) { // Map.Entry<String, String> entry = (Entry<String, String>) iterator.next(); // System.out.println("key:" + entry.getKey() + " value:"+ entry.getValue()); // } //判断支付结果,return_code通信标识,非交易标识,交易是否成功需要查看result_code来判断 String return_code=map.get("return_code")+""; String result_code=map.get("result_code")+""; if("SUCCESS".equals(return_code)&&"SUCCESS".equals(result_code)){ //表示支付成功 //sign进行验签,确保消息的真伪 String sign = map.get("sign")+"";//sign不参与验签 String reSign = WxPayUtil.getSign(map); if(sign.equals(reSign)){ //验签成功,进行结算 System.out.println("验签成功"); //----待修改,结算时,加锁加事务,验证订单是否有效,判断金额是否正确 } } //返回消息 String resultMsg="<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml> "; PrintWriter out = resp.getWriter(); out.write(resultMsg); out.flush(); out.close();}catch (Exception e) {e.printStackTrace();}}}验签方法,sign不参与签名:
/** * 签名 * 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序), * 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 * 特别注意以下重要规则: * ◆ 参数名ASCII码从小到大排序(字典序); * ◆ 如果参数的值为空不参与签名; * ◆ 参数名区分大小写; * ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。 * ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段 * 第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 * key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 * @param map * @return * @throws UnsupportedEncodingException */public static String getSign(Map<String,Object> map) throws UnsupportedEncodingException{ ArrayList<String> list = new ArrayList<String>(); for(Map.Entry<String,Object> entry:map.entrySet()){ //sign不参与验签 if(entry.getKey()=="sign"){ continue; } //参数为空不参与签名 if(entry.getValue()!=""){ list.add(entry.getKey() + "=" + entry.getValue()); } } int size = list.size(); String [] arrayToSort = list.toArray(new String[size]); Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); StringBuilder sb = new StringBuilder(); for(int i = 0; i < size; i ++) { sb.append(arrayToSort[i]); if(i!=size-1){ sb.append("&"); } } String result = sb.toString(); result += "&key=" + WxUtil.key; //Util.log("Sign Before MD5:" + result); result = MD5.MD5Encode(result).toUpperCase(); //Util.log("Sign Result:" + result); return result; }
0 0
- 微信支付,异步通知
- 微信,支付宝,支付异步通知验签,notify_url
- 【java web spring mvc】服务端 微信支付+微信异步通知【精】
- 【java web spring mvc】服务端 微信支付+微信异步通知【精】
- 微信jsapi支付,异步通知notify_url没有反应,但是可以发起支付,并能通知到前端
- 微信支付-支付结果通知接收
- 微信支付--异步处理支付结果
- 微信支付开发(4) 交易通知
- 微信支付开发(6) 发货通知
- 微信支付开发(7) 告警通知
- 微信支付开发(8) 维权通知
- 微信支付后台通知频率
- 微信支付(java版本)_支付结果通知
- java微信app支付-支付结果通用通知
- PHP开发微信支付代码及支付通知处理
- 微信支付(java版本)_支付结果通知
- Atitit 微信支付 支付结果通用通知
- 微信公众号支付 (四、支付结果通知)
- Android图片尺寸与质量压缩你用对了吗?inSampleSize与quality的浅析
- js获得某月的最后一天
- string split limit
- webrtc知识点
- 误提交到no branch之后再merge
- 微信支付,异步通知
- 计算机图形学中的Mesh数据结构
- webstorm 2017 激活破解
- 从现在开始
- ES6的新特性
- 杂货铺(便捷过渡动画,模拟人手触摸控件,layout_margin失效等等)
- 优维科技携手AWS,解读企业上云之路
- Android性能优化第(一)篇---基本概念
- 正则表达式:Pattern类与Matcher类详解