java实现微信支付(服务端)
废话不多说,直接看代码。
RequestHandlerrequestHandler=newRequestHandler(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=newTreeMap<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=newTreeMap<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算法! Stringsign=""; try{ sign=Sha1Util.createSHA1Sign(signParams); }catch(Exceptione){ e.printStackTrace(); } //增加非参与签名的额外参数 signParams.put("sign_method","sha1"); signParams.put("app_signature",sign); //api支付拼包结束------------------------------------ //获取prepayid Stringprepayid=requestHandler.sendPrepay(signParams); System.out.println("prepayid:"+prepayid);
代码:生成预付快订单完成
//生成预付快订单完成,返回给android,ios掉起微信所需要的参数。 SortedMap<String,String>payParams=newTreeMap<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是因为参数长度限制。 inttime=(int)(System.currentTimeMillis()/1000); payParams.put("timestamp",String.valueOf(time)); System.out.println("timestamp:"+time); //签名 Stringpaysign=""; try{ paysign=Sha1Util.createSHA1Sign(payParams); }catch(Exceptione){ e.printStackTrace(); } payParams.put("sign",paysign); //拼json数据返回给客户端 BasicDBObjectbackObject=newBasicDBObject(); 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")); Stringbackstr=dataObject.toString(); System.out.println("backstr:"+backstr); returnbackstr;
到此为止,预付款订单已生成,并且已返回客户端,坐等微信服务器通知,通知的地址就是生成预付款订单的notify_url
ResponseHandlerresHandler=newResponseHandler(request,response); resHandler.setKey(partnerkey); //创建请求对象 //RequestHandlerqueryReq=newRequestHandler(request,response); //queryReq.init(); if(resHandler.isTenpaySign()==true){ //商户订单号 Stringout_trade_no=resHandler.getParameter("out_trade_no"); System.out.println("out_trade_no:"+out_trade_no); //财付通订单号 Stringtransaction_id=resHandler.getParameter("transaction_id"); System.out.println("transaction_id:"+transaction_id); //金额,以分为单位 Stringtotal_fee=resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee Stringdiscount=resHandler.getParameter("discount"); //支付结果 Stringtrade_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-Md5failed"); }
以上就是java实现微信支付服务端所要提供的代码,希望大家仔细研究,实现微信支付。