欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

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