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; }
相关推荐
读书笔记:java 微信支付 wxPay 微信APP支付 支付宝支付 aliPay 服务端
在本项目"微信刷卡支付WxPay(WINFORM简易版)_C# VS2005"中,开发者使用C#编程语言,结合Visual Studio 2005开发环境,构建了一个简单的Windows Forms应用程序,以实现对微信支付接口的调用。下面我们将详细探讨这个...
微信支付SDK(wxpay-sdk-0.0.3)是微信官方提供的一个集成在开发者应用程序中的支付工具包,主要用于帮助开发者实现与微信支付接口的无缝对接。这个版本为0.0.3,代表着它是经过一系列迭代和优化后的一个较新版本,...
微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料微信支付配置资料代码加视频
微信支付功能封装,适用所有公众号、微信小程序支付wxpay-master.zip
### 微信支付Java SpringBoot对接开发详解 #### 一、微信支付配置申请 在进行微信支付集成前,首先需要完成微信支付的基本配置申请。这一步骤至关重要,因为只有完成配置后才能获得接入所需的凭证信息。 1. **...
ASP版微信支付接口是针对使用ASP(Active Server Pages)编程语言的开发者设计的一种集成微信支付功能的工具。这种接口使得ASP应用能够与微信支付平台无缝对接,为用户提供便捷的在线支付服务。在本文中,我们将深入...
本项目为基于Java语言的微信支付(WxPay)系统设计源码,精心整理汇编,包含24个文件,其中XML配置文件13个、Java源文件8个、其他文件类型1个。该源码集合涵盖了微信支付的核心功能实现,适用于开发人员快速搭建微信...
这个压缩包"DELPHI微信、支付宝支付(DLL源码)_delphi微信支付开发,delphi微信付款.zip"显然是为了解决这一问题,提供了DLL源码,帮助开发者实现Delphi环境下微信和支付宝的支付功能。 首先,我们来了解DLL(动态...
在本文中,我们将深入探讨如何将SpringBoot框架与微信支付服务进行整合,以便在您的应用程序中实现便捷的在线支付功能。我们将重点介绍SpringBoot的基本概念、微信支付的API使用以及Thymeleaf模板引擎在前端展示中的...
微信支付API是微信官方提供的一套用于商户与微信用户进行交易的接口,它允许商家在自己的应用程序或网站上集成微信支付功能,使用户能够通过微信客户端进行便捷的在线支付。这个API涵盖了从订单创建到支付确认的全...
2. **引入微信支付SDK**:在`pom.xml`中添加微信支付的SDK依赖,如`wxpay-sdk`。 3. **配置微信支付**:同样在配置文件中设置商户ID、商户秘钥、AppID等信息。 4. **生成支付请求**:创建支付请求对象,设置交易类型...
- `WxPay.Api.php`:微信支付SDK的核心类,包含了调用各种接口的方法。 - `WxPay.JsApiPay.php`:用于JSAPI支付的类,虽然题目没有提到JSAPI支付,但这个文件可能会存在,因为扫码支付和JSAPI支付在某些步骤上是共通...
在微信支付的开发过程中,确保安全性和正确性是至关重要的。为了在更换服务器证书时能够顺利进行测试,微信提供了沙箱环境,这是一个独立于实际生产环境的测试平台。在这个环境中,开发者可以对支付流程进行模拟操作...
这个压缩包"wxpay_sdk-master"似乎是一个Python版本的微信支付SDK实现,涵盖了扫码支付、APP支付、H5支付以及回调辅助函数等核心功能。以下是关于这些支付方式及SDK的一些详细知识点: 1. **扫码支付**: 扫码支付...
在IT行业中,集成第三方支付平台,如支付宝和微信支付,是常见的需求,特别是在电商和移动应用领域。在本文中,我们将深入探讨如何在QT框架下实现支付宝和微信支付的集成,以及可能遇到的问题。 首先,从提供的文件...
wxpaymoney 该方法是下单的方法 方法最后面mweb_url 这个是支付链接 可以唤起微信到微信支付界面 Wxpay---->getSign 签名方法中 秘钥一定要改成自己商户平台中的秘钥不然报签名错误 wxwap---->下面是...
微信支付是腾讯公司推出的在线支付服务,主要用于移动应用和网页端的支付场景。在这个Java网页Native微信支付源码中,我们可以深入理解微信支付的API调用、二维码生成以及支付回调处理等关键流程。 1. **微信支付...
微信支付工具类是一系列用于处理微信支付业务的Java类,它们封装了与微信支付接口交互的逻辑,使得开发者能够更方便地集成微信支付功能到自己的应用程序中。以下是对这些类的功能和作用的详细说明: 1. **WXPay....
"ABCWXPayAction_农行微信支付接口demo_DEMO_" 是一个针对农业银行(农行)微信支付接口的示例代码包,主要用于帮助开发者理解和实现与微信支付平台的集成。下面将详细介绍这个DEMO的要点及其相关的技术知识点。 ...