java实现微信支付(服务端)
程序员文章站
2024-03-08 16:25:10
废话不多说,直接看代码。
requesthandler requesthandler = new requesthandler(super.getreques...
废话不多说,直接看代码。
requesthandler requesthandler = new requesthandler(super.getrequest(),super.getresponse()); //获取token //两小时内有效,两小时后重新获取 token = requesthandler.gettoken(); //更新token 到应用中 requesthandler.gettokenreal(); system.out.println("微信支付获取token=======================:" +token); //requesthandler 初始化 requesthandler.init(); requesthandler.init(appid,appsecret, appkey,partnerkey, key);
代码:本地系统生成订单
// 设置package订单参数 sortedmap<string, string> packageparams = new treemap<string, string>(); packageparams.put("bank_type", "wx"); // 支付类型 packageparams.put("body", "xxxx"); // 商品描述 packageparams.put("fee_type", "1"); // 银行币种 packageparams.put("input_charset", "utf-8"); // 字符集 packageparams.put("notify_url", "http://xxxx.com/xxxx/wxcallback"); // 通知地址 这里的通知地址使用外网地址测试,注意80端口是否打开。 packageparams.put("out_trade_no", no); // 商户订单号 packageparams.put("partner", partenerid); // 设置商户号 packageparams.put("spbill_create_ip", super.getrequest().getremotehost()); // 订单生成的机器ip,指用户浏览器端ip packageparams.put("total_fee", string.valueof(rstotal)); // 商品总金额,以分为单位 // 设置支付参数 sortedmap<string, string> signparams = new treemap<string, string>(); signparams.put("appid", appid); signparams.put("noncestr", noncestr); signparams.put("traceid", propertiesutils.getorderno()); signparams.put("timestamp", timestamp); signparams.put("package", packagevalue); signparams.put("appkey", this.appkey); // 生成支付签名,要采用urlencoder的原始值进行sha1算法! string sign =""; try { sign = sha1util.createsha1sign(signparams); } catch (exception e) { e.printstacktrace(); } // 增加非参与签名的额外参数 signparams.put("sign_method", "sha1"); signparams.put("app_signature", sign); // api支付拼包结束------------------------------------ //获取prepayid string prepayid = requesthandler.sendprepay(signparams); system.out.println("prepayid :" + prepayid);
代码:生成预付快订单完成
//生成预付快订单完成,返回给android,ios 掉起微信所需要的参数。 sortedmap<string, string> payparams = new treemap<string, string>(); payparams.put("appid", appid); payparams.put("noncestr", noncestr); payparams.put("package", "sign=wxpay"); payparams.put("partnerid", partenerid); payparams.put("prepayid", prepayid); payparams.put("appkey", this.appkey); //这里除1000 是因为参数长度限制。 int time = (int) (system.currenttimemillis() / 1000); payparams.put("timestamp",string.valueof(time)); system.out.println("timestamp:" + time); //签名 string paysign =""; try { paysign = sha1util.createsha1sign(payparams); } catch (exception e) { e.printstacktrace(); } payparams.put("sign", paysign); //拼json 数据返回给客户端 basicdbobject backobject = new basicdbobject(); backobject.put("appid", appid); backobject.put("noncestr", payparams.get("noncestr")); backobject.put("package", "sign=wxpay"); backobject.put("partnerid", payparams.get("partnerid")); backobject.put("prepayid", payparams.get("prepayid")); backobject.put("appkey", this.appkey); backobject.put("timestamp",payparams.get("timestamp")); backobject.put("sign",payparams.get("sign")); string backstr = dataobject.tostring(); system.out.println("backstr:" + backstr); return backstr;
到此为止,预付款订单已生成,并且已返回客户端,坐等微信服务器通知,通知的地址就是生成预付款订单的notify_url
responsehandler reshandler = new responsehandler(request, response); reshandler.setkey(partnerkey); //创建请求对象 //requesthandler queryreq = new requesthandler(request, response); //queryreq.init(); if (reshandler.istenpaysign() == true) { //商户订单号 string out_trade_no = reshandler.getparameter("out_trade_no"); system.out.println("out_trade_no:" + out_trade_no); //财付通订单号 string transaction_id = reshandler.getparameter("transaction_id"); system.out.println("transaction_id:" + transaction_id); //金额,以分为单位 string total_fee = reshandler.getparameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = reshandler.getparameter("discount"); //支付结果 string trade_state = reshandler.getparameter("trade_state"); //判断签名及结果 if ("0".equals(trade_state)) { //------------------------------ //即时到账处理业务开始 //------------------------------ system.out.println("----------------业务逻辑执行-----------------"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— system.out.println("----------------业务逻辑执行完毕-----------------"); system.out.println("success"); // 请不要修改或删除 system.out.println("即时到账支付成功"); //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 reshandler.sendtocft("success"); //给微信服务器返回success 否则30分钟通知8次 return "success"; }else{ system.out.println("通知签名验证失败"); reshandler.sendtocft("fail"); response.setcharacterencoding("utf-8"); } }else { system.out.println("fail -md5 failed"); }
以上就是java实现微信支付服务端所要提供的代码,希望大家仔细研究,实现微信支付。