微信后台配置,需要注意的是不需要精确到servlet,只需精确到项目名称就好
Next
//此处根据网页授权接口得到openid
String openid = "";
String device_info = "设备1";// 终端设备号
String body = "Ipad mini 16G 白色";// 商品描述
String detail = "Ipad mini 16G 白色";// 商品详情
String attach = "附加";// 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
int total_fee = 1;// 总金额
try {
// outTradeNo 订单号
UnifiedOrderBean order = new UnifiedOrderBean(ParamConfig.appID
, ParamConfig.mchID, device_info,
PayUtil.getRandomStringByLength(32), null, body, detail,
attach, PayUtil.getTradeNo(), "CNY", total_fee, Util
.getIpAdd(), PayUtil.getYmdhms(), PayUtil
.getAfterTimeByNow(1800000), "WXG", req
.getRequestURL().toString(), "JSAPI", null, null, openid);
order.setSign(Signature.getSign(order));
HttpRequest http = new HttpRequest();
String retOrder = http.sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", order);
log.i("jsapi返回数据, "+retOrder);
Map<String, Object> mapOrder = XMLParser.getMapFromXML(retOrder);
Map<String, Object> map = new HashMap<String, Object>();
map.put("appId", ParamConfig.appID);
map.put("timeStamp", PayUtil.getTime_stamp());
map.put("nonceStr", PayUtil.getRandomStringByLength(32));
map.put("package", "prepay_id="+mapOrder.get("prepay_id"));
map.put("signType", "MD5");
map.put("paySign", Signature.getSign(map));
req.setAttribute("map",map);
req.getRequestDispatcher("/jsapi.jsp").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
log.e(e.getMessage());
}
<pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsapi</title>
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
function jsApiCall(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": "${map.appId}",
"timeStamp": "${map.timeStamp}",
"nonceStr": "${map.nonceStr}",
"package": "${map.package}",
"signType": "${map.signType}",
"paySign": "${map.paySign}"
},
function(res){
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付成功");
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
else if (res.err_msg == "get_brand_wcpay_request:cancel") {
alert("cancel");
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
else if (res.err_msg == "get_brand_wcpay_request:fail") {
alert("fail");
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
}
);
}
function callpay()
{
if (typeof('WeixinJSBridge') == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
</script>
</head>
<body>
<button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" οnclick="callpay()" >wx pay test</button>
</body>
</html>