欢迎大家来到IT世界,在知识的湖畔探索吧!
一、首先申请认证微信公众号获得微信支付功能
二、从微信商户后台获得三个参数,APPID,MCH_ID(商户id),API_KEY(API密钥)
三、同时在微信商户后台,开通Native支付功能,开通后才可以用微信网页支付功能
四、配置Native支付回调链接地址:
五、得到一些工具类,如签名,可以到微信开发平台获得
六、生成微信支付二维码
@RequestMapping(value = “/createNative”)
public Map<String, String> createNative(@RequestParam(“outTradeNo”) String outTradeNo,
@RequestParam(“totalFee”) String totalFee,
HttpServletRequest request, HttpServletResponse response) {
try {
//todo 创建请求参数
SortedMap<String, String> req = new TreeMap<String, String>();
req.put(“appid”, ConfigUtil.APPID); //公众号
req.put(“mch_id”, ConfigUtil.MCH_ID); // 商户号
req.put(“nonce_str”, WXPayUtil.generateNonceStr()); // 32位随机字符串
req.put(“body”, “梦商城”); // 商品描述
req.put(“out_trade_no”, outTradeNo); // 商户订单号
req.put(“total_fee”, df.format(Double.parseDouble(totalFee) * 100)); // 标价金额(分)
req.put(“spbill_create_ip”, CommonUtil.getIp(request)); // 终端IP
req.put(“notify_url”, “http://xxx.com/weixin_notify.shtml”); // 回调地址
req.put(“trade_type”, “NATIVE”); // 交易类型
req.put(“sign”, WXPayUtil.generateSignature(req, ConfigUtil.API_KEY, WXPayConstants.SignType.MD5)); // 签名
//todo 生成要发送的 xml
String xmlBody = WXPayUtil.generateSignedXml(req, ConfigUtil.API_KEY);
System.err.println(String.format(“微信支付预下单请求 xml 格式:\n%s”, xmlBody));
//todo 发送 POST 请求 统一下单 API 并携带 xmlBody 内容,然后获得返回接口结果
String result = CommonUtil.httpsRequest(“https://api.mch.weixin.qq.com/pay/unifiedorder”, “POST”, xmlBody);
System.err.println(String.format(“%s”, result));
//todo 将返回结果从 xml 格式转换为 map 格式
Map<String, String> resultMap = WXPayUtil.xmlToMap(result);
Map<String, String> map = new HashMap<>();
map.put(“code_url”, resultMap.get(“code_url”)); // 支付地址
map.put(“total_fee”, totalFee); // 总金额
map.put(“out_trade_no”, outTradeNo); // 订单号
logger.info(“weixinzhifujson=”+String.format(“%s”, map));
return map;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
五、前端 接口调用生成二维码的方法,
需要引入 <script type=”text/javascript” src=”../js/qrcode.min.js”></script>
function weixinzhifu() {
$(“#qrcode”).html(”);
// 跳转支付
var orderNo = $(“input[name=’orderNo’]”).val();
var money = $(“input[name=’money’]”).val();
var shopName = $(“input[name=’shopName’]”).val();
if(money==”0.00″){
alert(money)
updateOrder();
}
$.ajax({
url : “../WeiXinPay/createNative.shtml”,// 路径
type : “POST”,// 发送方式
data : {
“outTradeNo”:orderNo,”totalFee”:money,”shopName”:shopName
},
async : false,
dataType : “json”,
// contentType: “charset=utf-8”,
//cache : false,
success : function(result) {
var res = result;
console.log(res);
//alert(res[‘code_url’]);
new QRCode(document.getElementById(“qrcode”), res[‘code_url’]);
}
});
}
六、调取微信支付收银台界面
七、微信支付成功后回调方法
注意:回调方法Controller层接收必须支持get和post请求,否则回调地址进不了该方法。
@RequestMapping(value = “/weixin_notify”, method = { RequestMethod.GET, RequestMethod.POST })
八、前端页面每2秒轮询查询订单是否成功方法,如成功就返回成功支付的页面。
<script>
var iCount = setInterval(checkOrder, 2000); //每隔2秒执行一次check函数。
function checkOrder(){
var orderNo=$(“#orderNo”).val();
$.ajax({
url : “../get_weixin_orderstatus.shtml”,// 路径
type: “POST”,
dataType: “json”,
data: {
“orderNo”:orderNo
},
success: function (data) {
// console.log(data.status);
console.log(data);
if(data.status==0){
window.location.href = ‘/step4_Jump.shtml’;
}
else{
}
}
})
}
</script>
九、轮询查询支付成功后,显示订单支付成功的页面
以上是JAVA开发网页微信支付流程的整个过程,后续会写JAVA网页支付宝支付要点,欢迎交流。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17589.html