微信支付demo教程

 时间:2024-10-31 14:45:38

1、下面说说这几个步骤:1、access_token的获取因为access_token的获取有请求频的限制,只能固化到数据库中了。这个不是难题。

微信支付demo教程

2、生成预支付订单在微信支付Android的接口文档开头有提到:注意:appsecret、appkey、partnerkey 不应硬编码到客户端程序中,建议需要用到这三个字段的过程都在服务器端完成

微信支付demo教程

3、故此过程所有的信息全部在服务端生成。那么问题来了?挖掘机.... kao, 应该是,如何生成?在翻看服务端的demo中,有jsp文件夹。打开一看,都几乎可以直接搬运使用了。实现该过程的文件:payRequest.jsp如何在Java中实现上面jsp的请求?项目中用到了springMVC,代码如下:

微信支付demo教程

4、[java]view plaincopy@Controller@RequestMapping("/weixin/")publicclassWeiXinPayControllerextendsResponsePage{privateLoggerlog=Logger.getLogger(WeiXinPayController.class);@RequestMapping("weixin.do")publicStringdoWeinXinRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{Map<Object,Object>resInfo=newHashMap<Object,Object>();//接收财付通通知的URLStringnotify_url="http://127.0.0.1:8180/tenpay_api_b2c/payNotifyUrl.jsp";//---------------生成订单号开始------------------------//当前时间yyyyMMddHHmmssStringcurrTime=TenpayUtil.getCurrTime();//8位日期StringstrTime=currTime.substring(8,currTime.length());//四位随机数StringstrRandom=TenpayUtil.buildRandom(4)+"";//10位序列号,可以自行调整。StringstrReq=strTime+strRandom;//订单号,此处用时间加随机数生成,商户根据自己情况调整,只要保持全局唯一就行Stringout_trade_no=strReq;//---------------生成订单号结束------------------------PackageRequestHandlerpackageReqHandler=newPackageRequestHandler(request,response);//生成package的请求类PrepayIdRequestHandlerprepayReqHandler=newPrepayIdRequestHandler(request,response);//获取prepayid的请求类ClientRequestHandlerclientHandler=newClientRequestHandler(request,response);//返回客户端支付参数的请求类packageReqHandler.setKey(ConstantUtil.PARTNER_KEY);intretcode;Stringretmsg="";Stringxml_body="";//获取token值Stringtoken=AccessTokenRequestHandler.getAccessToken();log.info("获取token------值"+token);if(!"".equals(token)){//设置package订单参数packageReqHandler.setParameter("bank_type","WX");//银行渠道packageReqHandler.setParameter("body","测试");//商品描述packageReqHandler.setParameter("notify_url",notify_url);//接收财付通通知的URLpackageReqHandler.setParameter("partner",ConstantUtil.PARTNER);//商户号packageReqHandler.setParameter("out_trade_no",out_trade_no);//商家订单号packageReqHandler.setParameter("total_fee","1");//商品金额,以分为单位packageReqHandler.setParameter("spbill_create_ip",request.getRemoteAddr());//订单生成的机器IP,指用户浏览器端IPpackageReqHandler.setParameter("fee_type","1");//币种,1人民币66packageReqHandler.setParameter("input_charset","GBK");//字符编码//获取package包StringpackageValue=packageReqHandler.getRequestURL();resInfo.put("package",packageValue);log.info("获取package------值"+packageValue);Stringnoncestr=WXUtil.getNonceStr();Stringtimestamp=WXUtil.getTimeStamp();Stringtraceid="";////设置获取prepayid支付参数prepayReqHandler.setParameter("appid",ConstantUtil.APP_ID);prepayReqHandler.setParameter("appkey",ConstantUtil.APP_KEY);prepayReqHandler.setParameter("noncestr",noncestr);prepayReqHandler.setParameter("package",packageValue);prepayReqHandler.setParameter("timestamp",timestamp);prepayReqHandler.setParameter("traceid",traceid);//生成获取预支付签名Stringsign=prepayReqHandler.createSHA1Sign();//增加非参与签名的额外参数prepayReqHandler.setParameter("app_signature",sign);prepayReqHandler.setParameter("sign_method",ConstantUtil.SIGN_METHOD);StringgateUrl=ConstantUtil.GATEURL+token;prepayReqHandler.setGateUrl(gateUrl);//获取prepayIdStringprepayid=prepayReqHandler.sendPrepay();log.info("获取prepayid------值"+prepayid);//吐回给客户端的参数if(null!=prepayid&&!"".equals(prepayid)){//输出参数列表clientHandler.setParameter("appid",ConstantUtil.APP_ID);clientHandler.setParameter("appkey",ConstantUtil.APP_KEY);clientHandler.setParameter("noncestr",noncestr);//clientHandler.setParameter("package","Sign="+packageValue);clientHandler.setParameter("package","Sign=WXPay");clientHandler.setParameter("partnerid",ConstantUtil.PARTNER);clientHandler.setParameter("prepayid",prepayid);clientHandler.setParameter("timestamp",timestamp);//生成签名sign=clientHandler.createSHA1Sign();clientHandler.setParameter("sign",sign);xml_body=clientHandler.getXmlBody();resInfo.put("entity",xml_body);retcode=0;retmsg="OK";}else{retcode=-2;retmsg="错误:获取prepayId失败";}}else{retcode=-1;retmsg="错误:获取不到Token";}resInfo.put("retcode",retcode);resInfo.put("retmsg",retmsg);StringstrJson=JSON.toJSONString(resInfo);returnresponseAjax(request,strJson);}}

微信支付demo教程

5、最后,微信回调:可以参考jsp文件夹中的payNotifyUrl.jsp来处理,处理过程和上面第二步差不多

微信支付demo教程
  • 微信收付款被限制是什么情况
  • 微信收款码被限制收款怎么解决
  • 微信二维码收款限制怎么解除
  • 微信收款额度限制在哪里查看
  • 系统检测到你的交易行为涉嫌违规原因和解决方法
  • 热门搜索
    批注怎么删除 长妊娠纹了怎么办 iphone怎么备份 华硕怎么进入bios 怎么改微博名字 无痕浏览怎么设置 猎豹汽车怎么样 真相只有一个用日语怎么说 阿特兹怎么样 怎么唱情歌