Java调用微信jsp网页支付V3 Demo下载
程序员文章站
2022-03-01 13:23:56
...
本Demo是Java实现微信支付的功能、主要是通过jsp里面嵌套js方法提交后台、然后在后台通过org.apache.commons.httpclient来实现支使的、因为在网上找了很多版本的demo、最后总结了一下、希望对大家有用
Java代码
public static String dopay() { // 网页授权后获取传递的参数 String orderNo = "123121111153453235"; // String money = "0.01"; // 金额转化为分为单位 // float sessionmoney = Float.parseFloat(money); // String finalmoney = String.format("%.2f", sessionmoney); // finalmoney = finalmoney.replace(".", ""); // 商户相关资料 String appid = ""; String appsecret = ""; String mch_id = "";//邮件里的MCHID //在微信商户平台pay.weixin.com里自己生成的那个key String partnerkey = ""; String openId = "";//用oath授权得到的openid // 获取openId后调用统一支付接口 //https://api.mch.weixin.qq.com/pay/unifiedorder String currTime = TenpayUtil.getCurrTime(); // 8位日期 String strTime = currTime.substring(8, currTime.length()); // 四位随机数 String strRandom = TenpayUtil.buildRandom(4) ""; // 10位序列号,可以自行调整。 String strReq = strTime strRandom; // 子商户号 非必输 // String sub_mch_id=""; // 设备号 非必输 String device_info = ""; // 随机数 String nonce_str = strReq; // 商品描述 // String body = describe; // 商品描述根据情况修改 String body = "美食"; // 附加数据 // String attach = userId; // 商户订单号 String out_trade_no = orderNo; // int intMoney = Integer.parseInt(finalmoney); // 总金额以分为单位,不带小数点 // int total_fee = intMoney; // 订单生成的机器 IP String spbill_create_ip = "192.168.1.32"; // 订 单 生 成 时 间 非必输 // String time_start =""; // 订单失效时间 非必输 // String time_expire = ""; // 商品标记 非必输 // String goods_tag = ""; // 这里notify_url是 支付完成后微信发给该链接信息 //可以判断会员是否支付成功,改变订单状态等。 String notify_url = "http://192.168.1.111:8082/testPay/aa.htm"; String trade_type = "JSAPI"; String openid = openId; // 非必输 // String product_id = ""; SortedMap<String, String> packageParams = new TreeMap<String, String>(); packageParams.put("appid", appid); packageParams.put("mch_id", mch_id); packageParams.put("nonce_str", nonce_str); packageParams.put("body", body); // packageParams.put("attach", attach); packageParams.put("out_trade_no", out_trade_no); // 这里写的金额为1 分到时修改 packageParams.put("total_fee", "1"); // packageParams.put("total_fee", "finalmoney"); packageParams.put("spbill_create_ip", spbill_create_ip); packageParams.put("notify_url", notify_url); packageParams.put("trade_type", trade_type); packageParams.put("openid", openid); RequestHandler reqHandler = new RequestHandler(null, null); reqHandler.init(appid, appsecret, partnerkey); String sign = reqHandler.createSign(packageParams); String xml = "<xml>" "<appid>" appid "</appid>" "<mch_id>" mch_id "</mch_id>" "<nonce_str>" nonce_str "</nonce_str>" "<sign><![CDATA[" sign "]]></sign>" "<body><![CDATA[" body "]]></body>" "<out_trade_no>" out_trade_no "</out_trade_no>" // 金额,这里写的1 分到时修改 "<total_fee>" 1 "</total_fee>" // "<total_fee>" finalmoney "</total_fee>" "<spbill_create_ip>" spbill_create_ip "</spbill_create_ip>" "<notify_url>" notify_url "</notify_url>" "<trade_type>" trade_type "</trade_type>" "<openid>" openid "</openid>" "</xml>"; System.out.println(xml); String allParameters = ""; try { allParameters = reqHandler.genPackage(packageParams); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; Map<String, Object> dataMap2 = new HashMap<String, Object>(); String prepay_id = ""; try { prepay_id = new GetWxOrderno().getPayNo(createOrderURL, xml); if (prepay_id.equals("")) { System.out.println("统一支付接口获取预支付订单出错"); } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println("prepay_id:" prepay_id); SortedMap<String, String> finalpackage = new TreeMap<String, String>(); String appid2 = appid; String timestamp = Sha1Util.getTimeStamp(); String nonceStr2 = nonce_str; String prepay_id2 = "prepay_id=" prepay_id; String packages = prepay_id2; finalpackage.put("appId", appid2); finalpackage.put("timeStamp", timestamp); finalpackage.put("nonceStr", nonceStr2); finalpackage.put("package", packages); finalpackage.put("signType", "MD5"); String finalsign = reqHandler.createSign(finalpackage); return "timestamp:"" timestamp //这里的也是小写~~ "",nonceStr:"" nonceStr2 "",package:"" packages "",signType: "MD5" "",paySign:"" finalsign """; }
JS代码
wx.config({ // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数 //可以在pc端打开、参数信息会通过log打出、仅在pc端时才会打印 debug: true, <%=check%>,// 必填,签名,见附录1 // 必填、需要使用的JS接口列表、所有JS接口列表见附录2 jsApiList: [´chooseWXPay´] }); wx.ready(function(){ }); wx.error(function(res){ alert(res); // config信息验证失败会执行error函数、如签名过期导致验证失败 //具体错误信息可以打开config的debug模式查看 //也可以在返回的res参数中查看、对于SPA可以在这里更新签名 }); function callpay(){ wx.checkJsApi({ jsApiList: [´chooseWXPay´], // 检查微信支付接口是否可用 success: function (res) { if(res.checkResult.chooseWXPay){ wx.chooseWXPay({ <%=str%>, // 支付签名 cancel:function(res){ //微信返回的状态 //取消:res.errMsg == "chooseWXPay:cancel" alert("支付取消"); }, error:function(res){ alert("支付出错"); }, success:function(res){ /*微信返回的状态 //成功:res.errMsg == "chooseWXPay:ok"*/ alert("支付成功"); } }); } } }); }
若资源对你有帮助、扫描下方的二维码、关注DD博客微信公众号(ddblogs)吧
最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看
源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1bnbMZU3 密码: t77d