微信掃碼支付,掃碼支付后,頁面刷新


//微信掃碼支付
@At
@Ok("json")
@POST
@AdaptBy(type = JsonAdaptor.class)
public Object generatorOnce(HttpServletRequest req,@Param("paymentId")Integer paymentId, @Param("title")String title) throws Exception {
String openid = Webs.getOpenidInSession(req, "344");
ShopClientModel client = Webs.getSCInSession(req);
MapBean mb = new MapBean();

//訂單信息
PaymentModel paymentModel = paymentService.findByCnd(Cnd.where("id", "=", paymentId));
if (paymentModel.getPayStatus() != null && paymentModel.getPayStatus() != 0) { //判斷是否未支付
Code.error(mb, "不能重復支付");
return mb;
}
int paymentType = 0;
//判斷是活動報名還是報讀課程
SignUpModel signUpModel = signUpService.findByCnd(Cnd.where("order_id", "=", paymentId));
if (signUpModel != null) {
paymentType = 1; // 1為活動支付
}
if (paymentType == 1 && !eventSignUpCount(signUpModel)) {
Code.error(mb, "活動已滿員、選座信息已超時或活動失效");
return mb;
}
TreeMap<String, Object> params = new TreeMap<String, Object>();
SortedMap<String, Object> parameters = new TreeMap<String, Object>();
Config c = wxClientService.initOrgConfig("344");
cn.oa.cyb.weixin.model.Merchant m = wxClientService.initOrgMerchant("344");
String appId = c.getAppId();
String mchId = m.getMERCHANTID();
String nonceStr = WeixinUtil.CreateNoncestr();

String payId = System.currentTimeMillis() + "";
parameters.put("appid", WeiXinConfig.MCH_APPID); //服務號appid
parameters.put("mch_id", WeiXinConfig.MERCHANT_ID); //微信支付商戶號
parameters.put("nonce_str", nonceStr); //隨機字符串
parameters.put("body", paymentType == 1 ? "活動報名" : "報讀課程"); //支付商品名
parameters.put("out_trade_no", payId); //商戶訂單號
paymentModel.setPay_id(payId); //提交訂單后存放訂單號
paymentModel.setPer_pay_time(new Date()); //支付時間
parameters.put("total_fee", (int) (paymentModel.getAmount()*100) + ""); //支付金額(分為單位)
paymentService.update(paymentModel);
String ipAddr = getIpAddr(req);
if (StringUtils.isNotBlank(ipAddr) && ipAddr.indexOf(",") != -1) {
ipAddr = ipAddr.split(",")[0];
}
parameters.put("spbill_create_ip", ipAddr); //客戶端主機
parameters.put("notify_url", PathUtil.getBasePath(req) + "/wx/order/classPayCallBack"); //回調地址(可以用活動報名或者課程的)
parameters.put("trade_type", "NATIVE"); //類型,網頁掃碼支付
parameters.put("attach", "2"); //附加參數
String mchKey = m.getMERCHANTSECRET();
String sign = WeixinUtil.createSign("UTF-8", parameters, WeiXinConfig.MCH_KEY);
parameters.put("sign", sign); //簽名
String xml = XMLUtil.getRequestXml(parameters); //將請求參數轉成string類型
String result = QiyeWeixinUtil.httpsRequest(InterfacePath.GATEWAY_WECHAT_PAY, "POST", xml); //支付請求返回
Map<String, String> resultMap = XMLUtil.doXMLParse(result); //解析返回參數
String return_code = resultMap.get("return_code"); //返回狀態
String return_msg = resultMap.get("return_msg"); //返回消息
//商戶號需開通掃碼支付
String code_url = resultMap.get("code_url"); //使用此地址來生成二維碼

try {
StringBuffer url = req.getRequestURL();
String tempContextUrl = url.delete(url.length() - req.getRequestURI().length(), url.length()).toString();
if(title == null){
return error("參數錯誤");
}
if (title != null) {
getCodeImg(req, mb, tempContextUrl, code_url,title);
Code.ok(mb, "OK");
} else {
Code.error(mb, "id不能為空!");
}
} catch (Exception e) {
Code.error(mb, e.getMessage());
}
return mb;
}

根據文檔來寫,回調的地址只是反饋給微信的信息,並沒有返回到頁面的內容。所以支付成功后,頁面顯示呢。這里我用了個最笨的辦法。

就是頁面跟手機掃碼支付區分,PC頁面是頁面,而手機掃碼付款是付款。兩個不相干。

在頁面上我們加一個定時請求的定時器,幾秒鍾請求一下,當發現狀態改變時(在回調的接口進行訂單支付狀態改變),進行頁面刷新。

 

 

 

設置兩秒定時請求接口,當狀態改變時,刷新頁面

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM