调起支付控件后一闪而过,一般是支付秘钥或者授权目录的问题。解决办法:
1.重置支付秘钥(更换服务器地址必须更换)
2.检查授权目录
//支付中间业页 Lock-玄清
@RequestMapping("wap/wxp.html")
public ModelAndView wxp(long orderid,HttpServletRequest request){
ModelAndView mv = new ModelAndView();
request.getSession().setAttribute("orderid", orderid);
Orders orders = orderService.findBydetail(orderid);
mv.addObject("orderid", orders.getId());
return mv;
}
//授权成功后用code换取openId
@RequestMapping("wap/oauth.html")
public ModelAndView oauth(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
String code = request.getParameter("code");//Code,授权成功就存在该值
String token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WxPayConfig.APPID+"&secret="+WxPayConfig.APPSECRET+"&code="+code+"&grant_type=authorization_code";
JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(token_url, "POST", null);
logger.info("jsonObject:"+jsonObject);
Object errorCode = jsonObject.get("errcode");
if(errorCode != null) {
logger.info("code不合法");
}else{
String openId = jsonObject.getString("openid");
AuthUser wxUser = new AuthUser();
wxUser.setAccess_token(jsonObject.getString("access_token"));
wxUser.setOpenid(jsonObject.getString("openid"));
request.getSession().setAttribute("AuthUser", wxUser);
logger.info(wxUser);
logger.info("openId:"+openId);
request.getSession().setAttribute("openId", openId);
}
long orderid = (long)request.getSession().getAttribute("orderid");
logger.info(orderid);
mv.addObject("orderid", orderid);
return mv;
}
/**
* 支付方法 Lock-玄清
* @param orderid
* @param request
* @return
*/
@SuppressWarnings("unchecked")
@ResponseBody
@RequestMapping("wxpay/wxPay.html")
public AjaxMessage<Object> wxpay(long orderid,HttpServletRequest request){
AjaxMessage<Object> ajax = new AjaxMessage<>();
logger.info("微信公众号支付 发起支付 jsapi h5");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
// 订单查询
Orders orders = orderService.selectByKey(orderid);
logger.info(orders);
//获取openID
String openid = (String)request.getSession().getAttribute("openId");
try {
//用户ip
String user_ip = ZhifuController.localIp();
//创建随机数
String nonceStr = getNonceStr();
//统一订单发送参数
WxPaySendData data = new WxPaySendData();
data.setAppid(WxPayConfig.APPID);
data.setAttach("上海葵鸿数码科技有限公司");
data.setBody("在线购物");
data.setMch_id(WxPayConfig.MCHID);
data.setNonce_str(nonceStr);
data.setNotify_url(WxPayConfig.wap_NOTIFY_URL);
data.setOut_trade_no(orders.getOrderid().toString());
data.setTotal_fee((int)(orders.getPrice()*100));//单位:分
data.setTrade_type("JSAPI");
data.setSpbill_create_ip(user_ip);
data.setOpenid(openid);
data.setTime_start(sdf.format(date));
String result = unifiedorder(data, WxPayConfig.KEY);
Map<String, String> map = new HashMap<String, String>();
try {
map = ZhifuController.doXMLParse(result);
logger.info(map+"lock-玄清");
logger.info("微信jsapi------------------return_code="+map.get("return_code")+"; result_code="+map.get("result_code")+"------------------------------");
} catch (Exception e) {
logger.error("doXMLParse()--error",e);
}
if(map.get("return_code").toString().equals("SUCCESS") && map.get("result_code").toString().equals("SUCCESS")){
ajax.setIs(true);
logger.info(map.get("prepay_id"));
logger.info(map.get("prepay_id").toString());
//生成sign
SortedMap<Object,Object> signMap = new TreeMap<Object,Object>();
signMap.put("appId", WxPayConfig.APPID);
signMap.put("timeStamp", getTimeStamp());
signMap.put("nonceStr", nonceStr);
signMap.put("package", "prepay_id="+map.get("prepay_id").toString());
signMap.put("signType", "MD5");
String paySin = createSign(signMap,WxPayConfig.KEY);
logger.info("生成的签名PaySIGN:"+paySin);
SignMap signMap1 = new SignMap();
logger.info(WxPayConfig.APPID);
signMap1.setAppid(WxPayConfig.APPID);
signMap1.setTimeStamp(getTimeStamp());
logger.info("时间戳为:"+getTimeStamp());
signMap1.setNonceStr(nonceStr);
logger.info(nonceStr);
signMap1.setPackageValue("prepay_id="+map.get("prepay_id").toString());
signMap1.setSignType("MD5");
logger.info("MD5");
signMap1.setPaySign(paySin);
logger.info("生成的签名PaySIGN:"+paySin);
logger.info(signMap1);
ajax.setData(signMap1);
}else{
ajax.setIs(false);
}
}catch (Exception e){
e.printStackTrace();
logger.error("微信支付错误",e);
ajax.setIs(false);
}
return ajax;
}
此时微信中配置的支付授权目录为:域名/wap,而不是:域名/wxpay