Java调用微信jsp网页支付V3 Demo下载
2015-08-11 12:28:46  By: dwtedx

本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

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+