微信支付demo教程

微信支付的调用步骤:
1、获取  access_token
2、生成预支付订单
3、调起微信支付

操作方法

  • 01

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

  • 02

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

  • 03

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

  • 04

    [java] view plain copy @Controller @RequestMapping("/weixin/") public class WeiXinPayController extends ResponsePage  { private Logger log = Logger.getLogger(WeiXinPayController.class); @RequestMapping("weixin.do") public String doWeinXinRequest(HttpServletRequest request,HttpServletResponse response) throws Exception { Map<Object,Object> resInfo = new HashMap<Object, Object>(); //接收财付通通知的URL String notify_url = "http://127.0.0.1:8180/tenpay_api_b2c/payNotifyUrl.jsp"; //---------------生成订单号 开始------------------------ //当前时间 yyyyMMddHHmmss String currTime = TenpayUtil.getCurrTime(); //8位日期 String strTime = currTime.substring(8, currTime.length()); //四位随机数 String strRandom = TenpayUtil.buildRandom(4) + ""; //10位序列号,可以自行调整。 String strReq = strTime + strRandom; //订单号,此处用时间加随机数生成,商户根据自己情况调整,只要保持全局唯一就行 String out_trade_no = strReq; //---------------生成订单号 结束------------------------ PackageRequestHandler packageReqHandler = new PackageRequestHandler(request, response);//生成package的请求类 PrepayIdRequestHandler prepayReqHandler = new PrepayIdRequestHandler(request, response);//获取prepayid的请求类 ClientRequestHandler clientHandler = new ClientRequestHandler(request, response);//返回客户端支付参数的请求类 packageReqHandler.setKey(ConstantUtil.PARTNER_KEY); int retcode ; String retmsg = ""; String xml_body = ""; //获取token值 String token = AccessTokenRequestHandler.getAccessToken(); log.info("获取token------值 " + token); if (!"".equals(token)) { //设置package订单参数 packageReqHandler.setParameter("bank_type", "WX");//银行渠道 packageReqHandler.setParameter("body", "测试"); //商品描述 packageReqHandler.setParameter("notify_url", notify_url); //接收财付通通知的URL packageReqHandler.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,指用户浏览器端IP packageReqHandler.setParameter("fee_type", "1"); //币种,1人民币   66 packageReqHandler.setParameter("input_charset", "GBK"); //字符编码 //获取package包 String packageValue = packageReqHandler.getRequestURL(); resInfo.put("package", packageValue); log.info("获取package------值 " + packageValue); String noncestr = WXUtil.getNonceStr(); String timestamp = WXUtil.getTimeStamp(); String traceid = ""; ////设置获取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); //生成获取预支付签名 String sign = prepayReqHandler.createSHA1Sign(); //增加非参与签名的额外参数 prepayReqHandler.setParameter("app_signature", sign); prepayReqHandler.setParameter("sign_method", ConstantUtil.SIGN_METHOD); String gateUrl = ConstantUtil.GATEURL + token; prepayReqHandler.setGateUrl(gateUrl); //获取prepayId String prepayid = 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); String strJson = JSON.toJSONString(resInfo); return responseAjax(request, strJson); } }

  • 05

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

微信APP
(0)

相关推荐

  • 微信支付如何注销?注销微信支付账户教程

    互联网企业和银行合作越来越密切,其中的衍生物“移动支付”也越来越多了,像支付宝、微信支付、百度钱包一个也不能少。 为了抢占移动支付市场,微信支付的活动就非常多,身边很多朋友都至少有十几元入袋。但活动过 ...

  • 微订微信支付设置教程

    微信支付现已全面开放,无须缴纳两万元保证金.这就意味着,只要是企业,有相关证件都可以申请属于自己的微信支付,顾客付款直接到您自己的账户.那么,微信支付申请后,您就可以在微订后台,做相关设置,实现顾客下 ...

  • 滴滴出行app怎么微信支付? 滴滴使用微信付款的教程

    微信中还有一些钱,在使用滴滴出行的时候,想要使用微信支付,该怎么设置呢?下面我们就来看看详细的教程. 1.我们在手机上找到“滴滴出行”点击打开. 2.进入后,我们点击左上角的“人头像”图标. 3.这时 ...

  • 手机12306预订火车票怎么使用微信支付付款?

    手机12306预订火车票的时候,想要使用微信支付,该怎么使用呢?下面我们就来看看详细的教程. 1.打开上安装的中国铁路网上购票软件12306应用 2.我们之前的12306的版本是不能够支持微信支付的付 ...

  • 网易mumu模拟器怎么用微信和支付宝充值?mumu模拟器使用支付宝和微信支付的方法

    网易MuMu(安卓模拟器)是网易官方推出的精品游戏服务平台,安装后可在电脑上运行各类游戏与应用,具备全面兼容.操作流畅.智能辅助等特点,每天还会为您推荐火热的应用......今天小编要给大家分享的是网 ...

  • 微信支付接口怎么申请 微信支付接口申请详细教程

    微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏——“微信支付”终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的开发者可以登录公众平台申请 ...

  • 微信中的微信支付功能怎么用?微支付功能安全使用方法图文教程

    微信是快速与人联系的一种手机新型语音工具,那么微信支付功能怎么用呢?前段时间有消息称微信5.0版本,会推出“微信支付”的独立平台支付功能,可能很多朋友不知道其实不用微信5.0我们也一样可以完成支付,下 ...

  • 12306火车票怎么使用微信支付? 12306订票使用微信付款的教程

    2017年11月23开始12306铁路订火车票系统可以使用微信支付了,该怎怎么使用微信付款呢?下面我们就来看看详细的教程. 1.打开浏览器百度首页输入12306搜索,点击搜索到的官网订票网站. 2.打 ...

  • 滴滴打车怎么用微信支付 滴滴打车使用教程

    第一步、登录微信,进入我的标签,选择我的银行卡,可以看到滴滴打车的服务,选择进入嘀嘀打车页面。 第二步、在嘀嘀打车页面,可以看到附近的出租车数量及自己所在的位置,在要去的地方输入你的目的地,选择你要付 ...