j界面调用支付ajax 通过xml格式向微信调起支付密码窗
// 微信支付 $.ajax({ type: "POST", url: path + "/wxpay/getPrepayId.do", dataType: "json", data: { totalFee : payCost, out_trade_no : orderNum, }, success: function(data) { wx.chooseWXPay({ appId: data.appId, timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位 package: data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: data.paySign, // 支付签名 success: function (res) { if (res.err_msg == "get_brand_wcpay_request:ok") { myLoading(); queryOrder(0); return; } if (res.errMsg == "chooseWXPay:ok") { myLoading(); queryOrder(0); return; }; }, error: function(res) { myAlert("请求超时,请重试"); }, complete: function() { myLoadingClose(); } }); } });
getPrepayId 方法:
@Action(value = "getPrepayId")
public String getPrepayId() throws Exception {
ProjSession ps = this.getSession();
//判断
// 商品描述,根据提交上来的ID来获取商品名称
String body = "服务";
String totalFeeStr = this.getRequest().getParameter("totalFee");
String out_trade_no = this.getRequest().getParameter("out_trade_no");
// 本次订单的金额,单位为分
Double d = Double.parseDouble(totalFeeStr) * 100;
int totalFee = Integer.parseInt(new java.text.DecimalFormat("0").format(d));
// 向微信发送的内容
UnifiedorderReqData xmlObj = new UnifiedorderReqData(body, out_trade_no, totalFee, this.getRequest().getRemoteAddr(), ps.getOpenid());
// 向微信发送接口数据
String result = WeixinUtil.weixinPostXml(Configure.UNIFIEDORDER, xmlObj);
// 微信返回的数据
UnifiedorderRespData retModel = (UnifiedorderRespData) Util.getObjectFromXML(result, UnifiedorderRespData.class);
Map<String, Object> returnMap = new HashMap<String, Object>();
if (ObjUtil.isNullOrEmpty(retModel)) {
// 支付请求失败
returnMap.put("success", false);
returnMap.put("msg", "支付请求失败");
this.doResponseWithJson(returnMap);
return NONE;
}
if (!"SUCCESS".equals(retModel.getReturn_code().toUpperCase())) {
// 支付请求失败
returnMap.put("success", false);
returnMap.put("msg", retModel.getReturn_msg());
this.doResponseWithJson(returnMap);
return NONE;
}
if (!retModel.getResult_code().toUpperCase().equals("SUCCESS")) {
returnMap.put("success", false);
returnMap.put("msg", retModel.getErr_code_des());
this.doResponseWithJson(returnMap);
return NONE;
}
//判断是否有预支付订单
OrderModel smodel=new OrderModel();
smodel.setOpenId(model.getOpenId());
smodel.setOrderStatus(Constants.ORDER_STATUS_2);
List<OrderModel> olist =this.getDao().selectForList("order.getOpenIdStatus", smodel);
if(ObjUtil.isNullOrEmpty(olist)){
// 插入dd_order表
//预支付
model.setOrderStatus(Constants.ORDER_STATUS_2);
model.setOrderWebStatus(Constants.ORDER_STATUS_2);
this.getDao().insertSql("order.add_order", model);
}else{
model.setId(olist.get(0).getId());
model.setOrderStatus(Constants.ORDER_STATUS_2);
model.setOrderWebStatus(Constants.ORDER_STATUS_2);
this.getDao().updateSql("order.upt_order_openId", model);
}
returnMap.put("appId", Constants.APPID);
returnMap.put("timeStamp", Long.toString(System.currentTimeMillis() / 1000));
returnMap.put("nonceStr", RandomStringGenerator.getRandomStringByLength(32));
returnMap.put("package", "prepay_id="+retModel.getPrepay_id());
returnMap.put("signType", "MD5");
returnMap.put("paySign", Signature.getSign(returnMap));
this.doResponseWithJson(returnMap);
return NONE;
}
如果调用支付窗口成功,输入密码成功。
先调用WxNotifyAction.java
@Namespace("/notify") public class WxNotifyAction extends BaseAction { private static final long serialVersionUID = 1L; private TradeService tradeService = new TradeServiceImpl(); @Action(value = "notify") public String notification() throws Exception { System.out.println("!!!!!!!!!!!into notify"); HttpServletRequest req = this.getRequest(); HttpServletResponse resp = this.getResponse(); req.setCharacterEncoding("utf-8"); InputStream reqBody = req.getInputStream(); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/xml; charset=utf-8"); String receiveXml = Util.inputStreamToString(reqBody); System.out.println(receiveXml); Notice retModel = (Notice) Util.getObjectFromXML(receiveXml, Notice.class); PrintWriter out = resp.getWriter(); if (ObjUtil.isNullOrEmpty(retModel)) { out.print("<xml><return_code>FAIL</return_code><return_msg>NO_HANDLER_REPORTED</return_msg></xml>"); return NONE; } if (!"SUCCESS".equals(retModel.getReturn_code().toUpperCase())) { out.print("<xml><return_code>FAIL</return_code><return_msg>NO_HANDLER_REPORTED</return_msg></xml>"); return NONE; } if (!"SUCCESS".equals(retModel.getResult_code().toUpperCase())) { out.print("<xml><return_code>FAIL</return_code><return_msg>NO_HANDLER_REPORTED</return_msg></xml>"); return NONE; } // 调用成功,插入数据库 boolean flag = tradeService.wxPayTrade(retModel); System.out.println("--------------"+flag+"---------------"); // if (flag) { out.print("<xml><return_code>SUCCESS</return_code></xml>"); // } else { // out.print("<xml><return_code>FAIL</return_code><return_msg>NO_HANDLER_REPORTED</return_msg></xml>"); // } return NONE; } }
然后调用js判断是否支付成功,wxpay表是否有数据插入
function queryOrder(requestTimes) { $.ajax({ type : "POST", url : path + "/wxpay/orderQuery.do", data : { orderNum : orderNum}, dataType : "json", success : function(data) { if (!data.success) { if (requestTimes < 3) { requestTimes = requestTimes + 1; setTimeout(function(){queryOrder(requestTimes);}, 1000); } else { myAlert("请求超时,请核对订单列表,确定是否成功下单"); } } else { myLoadingClose(); successPng(); } } }); }
orderQuery
@Action(value = "orderQuery") public String orderQuery() throws Exception { Map<String, Object> returnMap = new HashMap<String, Object>(); ProjSession ps = this.getSession(); OrderModel o = new OrderModel(); // 页面需要把订单编号告诉我 String orderNum = this.getRequest().getParameter("orderNum"); o.setOrderNum(orderNum); o.setPayType(Constants.wxpay); o.setOpenId(ps.getOpenid()); o.setOrderStatus(Constants.ORDER_STATUS_1); List<OrderModel> list = this.getDao().selectForList("wxpay.checkStatus", o); if (!ObjUtil.isNullOrEmpty(list)) { // 交易已经成功 System.out.println("++++++交易已经成功"); returnMap.put("success", true); this.doResponseWithJson(returnMap); } else { // 交易未完成 // 向微信服务器查询订单是否完成 System.out.println("++++++交易未成功"); OrderqueryReqData xmlObj = new OrderqueryReqData(orderNum); String result = WeixinUtil.weixinPostXml(Configure.ORDERQUERY, xmlObj); OrderqueryRespData retModel = (OrderqueryRespData)Util.getObjectFromXML(result, OrderqueryRespData.class); if (ObjUtil.isNullOrEmpty(retModel)) { // 支付请求失败 returnMap.put("success", false); this.doResponseWithJson(returnMap); } if (!"SUCCESS".equals(retModel.getReturn_code().toUpperCase())) { // 支付请求失败 returnMap.put("success", false); this.doResponseWithJson(returnMap); } if (!"SUCCESS".equals(retModel.getResult_code().toUpperCase())) { returnMap.put("success", false); this.doResponseWithJson(returnMap); } Notice n = new Notice(); BeanUtils.copyProperties(n, retModel); boolean flag = tradeService.wxPayTrade(n); returnMap.put("success", flag); this.doResponseWithJson(returnMap); } return NONE; }
相关推荐
微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料代码加视频
微信支付功能封装,适用所有公众号、微信小程序支付wxpay-master.zip
wxpaymoney 该方法是下单的方法 方法最后面mweb_url 这个是支付链接 可以唤起微信到微信支付界面 Wxpay---->getSign 签名方法中 秘钥一定要改成自己商户平台中的秘钥不然报签名错误 wxwap---->下面是...
这是微信官方封装的微信支付SDK Jar包最新版本--wxpay-sdk-0.0.3。
本程序为微信刷卡(刷码)支付。调用微信官网上API做成简易的WINFORM程序,供大家学习,少走弯路。
ectouch微信支付(含微信H5支付,含说明文档) 注意: 1、wxpay.php文件里面的 get_h5,获取H5微信支付链接 2、getPrepayId 方法新增一个参数,如果是h5支付则返回返回数组 (有问题请留言)
众所周到,目前微信支付已经十分普及,无论是商场、超市、网站上,微信支付的发展十分迅速,而ASP版微信支付在微信公众平台上并没有提供,而目前基于ASP语言开发的网站又十分普遍,因此这类网站集成微信支付就十分...
1/netCore 接入微信支付,内含普通支付,微信V3支付,服务商模式 2、【普通支付,支付回写,退款,分账给个人,服务商模式支付,服务商模式支付回写,服务商模式分账给子商户,V3支付退款】 3、源码分享
开发java微信支付(小程序),退款(V3版本)
生成扫描支付模式一URL 成直接支付url,支付url有效期为2小时,模式二 生成扫描支付模式一URL
微信支付jar包下载2017年最新版
wxpaymoney 该方法是下单的方法 方法最后面mweb_url 这个是支付链接 可以唤起微信到微信支付界面 Wxpay---->getSign 签名方法中 秘钥一定要改成自己商户平台中的秘钥不然报签名错误 wxwap---->下面是异步回调...
微信支付 Java SDKcom.github.wxpay.sdk.WXPay类下提供了对应的方法: |方法名 | 说明 | |--------|--------| |microPay| 刷卡支付 | |unifiedOrder | 统一下单| |orderQuery | 查询订单 | |reverse | 撤销订单 | |...
新版PB微信支付增加【扫码支付】【订单查询】等功能 inv_wxpay.of_clear() inv_wxpay.of_add("appid","") inv_wxpay.of_add("auth_code",sle_code.text)//授权码 inv_wxpay.of_add("body",'刷卡支付测试')//商品...
WxPay.Api.php 微信支付接口代码WxPay.Api.php 微信支付接口代码
1.这里的微信支付类为V3.3.7版本的。 2.对于3.1 版本的thinkphp 在项目目录下的config.php 中加入'APP_AUTOLOAD_PATH' =>'@.ORG.wxpay' 将ORG/wxpay/文件夹设置为 自动加载,然后在微信支付的项目中就可以直接使用...
微信H5支付,微信浏览器支付,微信支付 1, 修改wxpay.php文件的参数 define('APPID','APPID'); define('APIKEY','商户安全密钥'); define('MCH_ID','商户ID'); define('NOTIFY_URL','http://你的域名/return_url....
C#微信支付_Demo_v3包括(JSAPI支付-扫码支付一-二维码制作)
.每一个接口对应一个类。 2.常用工具(产生随机字符串、生成签名、以post方式提交xml、证书的使用等)封装成CommonUtil类。 3.接口分三种类型:请求型接口、响应型...Wxpay_client_、Wxpay_server_都继承CommonUtil类
WxPay.Api.php"接口访问类,包含所有微信支付API列表的封装" WxPay.Config.php"配置信息所在文件" WxPay.Data.php"签名相关类,含签名生成" WxPay.Exception.php"异常类" WxPay.Notify.php"回调函数的...