微信app支付详解

本文适合初学者,通过简单易懂的方式讲解如何使用Java实现微信App支付。主要涉及后台需要做的两件事:为前端提供加签接口,以及设置微信支付回调接口。文中强调了获取appid、appkey等关键参数的重要性,并提供了接口代码示例。
摘要由CSDN通过智能技术生成

阿西吧,弄了一个多小时,弄错了一点全没了,,,,,,,,啥破编辑器,醉了,重新来吧。

          咳咳,不要紧张,清理一下嗓子,在开始之前,我想说说,在完成之前,我本人就是一个菜鸟,很多地方我也不会弄呢,像我这种看开发文档就头疼的人做微信支付,对着官方文档整个人都飘了,本文就是针对一些不会做又看文档头疼的人来做的,相信只要会java的菜鸟看着都能做出来,第一次写博客,希望写点对大家有帮助的东西,  在感慨一下,其实很多程序我么您第一次做的时候都想的太复杂了,做完了之后就感觉其实也没个啥,当你们看完这篇文章完成微信支付的时候,相信第一次弄的童鞋们会和我一样有这种感慨。如果这篇文章帮助到你了,请给我赞一个夸夸我。

 废话不多说 直接开始正文

        微信支付,我们做java只是后台服务端,具体的实现流程官方写的我也看不懂,下边是我自己理解的

  客户确认商品点击支付—>后台提供前端调用的加签接口---->前端拿到后台加签的参数调起支付-->微信支付--->微信回调后台提供的回调接口    

这样微信支付就完成了,总体看起来,后台只需要做两件事

      1.给前端提供接口把订单进行加签在返还给前端

      2.给微信提供回调接口确认支付信息。

这样说的够明白了吧,相信大家已经明白后台需要做哪些事了吧。

在做微信支付之前,后台得获得3个重要的参数

微信官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1点击打开链接

1.appid  微信商户号   appkey


这几个参数都是微信支付必要的,最重要的,所以一定要根据文档找准确了,有了这几个参数,自己封装一下,下边要用到的时候自己能调用出来就行。注意,这几个参数极为重要,所以写的时候尽量封装严实一点,不然有可能有不安全因素。


封装完这几个参数以后,自己写一个供前端调用的接口,上代码:

	/**
	 * 微信app支付统一下单
	 * @param request
	 * @param orderNumber
	 * @param payMoney
	 * @param orderType
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/APP/weixinPay",method={RequestMethod.POST,RequestMethod.GET})
	@ResponseBody
       /**
*  ResultState  是我自己封装的一个返回结果的对象,有需要的后边我会附代码,很简单的,毕竟我本人水平也不好。
*    在这里,订单加签我让前端穿了3个参数  orderNumber 订单编号 需要提供给微信的  payMoney 用户支付金额  需要提供给微信的 orderType订单类型 确定body字段的
*  这里大家可以根据自己的业务逻辑确定参数,没必要跟我的一致,返回结果也是,大家也可应自己定义的
*/
	public  ResultState weixinUnifiedOrder( HttpServletRequest request,
			 @RequestParam("orderNumber")String orderNumber,
	                 @RequestParam("payMoney")String payMoney,
	                 @RequestParam("orderType")String orderType
	                                       ) throws Exception{
		
//这里是我自己根据类型获取body的,大家可以自己定义
		Map<String, String> result = new HashMap<>();
		String body="";
		String orderCode = "";
		String total_fee = "";
		  if(orderType.equals("1")) {
			  body="ykcz";
		  }
		  if(orderType.equals("2")) {
			  body="E卡充值";
		  }
		  if(orderType.equals("3")) {
			  body="手机充值";
		  }
		  if(orderType.equals("4")) {
			  body="油卡购买";
		  }
		  Order order = orderService.selectbyordernumber(orderNumber);
		  if(order!=null) {
			  if(order.getPaymentType().equals("1")) {
				  orderCode=orderNumber;
				 Integer money=(int)(Double.parseDouble(payMoney)*100);
				  total_fee=String.valueOf(money);
				    String[] initValue = new String[3];
				    initValue[0] = orderCode;
				    initValue[1] = total_fee;
				    initValue[2] = body;
//微信支付需要传参使用者的ip,这里获取了一下,可以自己网上找,懒得找的下边我会附代码
				    String remoteAddr = GetIp.getRemoteAddr(request);
					String ip="";
					if (remoteAddr.length()>16) {
						String[] split = remoteAddr.split(",");
						for (int i = 0; i < split.length; i++) {
							ip=split[0];
						}
					}else{
						ip=remoteAddr;
					}
//这里就是把订单信息封装好了统一下单,微信会返回一个加完签的结果,只要判断一下结果的正确性就可以吧这个结果直接返回给前端,让前端去调起支付了
//我把上边提到的几个参数封装到了ConfigUtils里,这里你取你自己的             appid                          微信商户号     上边数组封装的值,自己对应  ip            微信回调地址(自己写的,上边提到的第二部)  APP,看文档,你是什么支付就传//什么,body 上边定义的字段,必传,加签的时候有body的解释,也可以自己看微信官方文档   自己封装的appkey         
					result=WeiXinPay.weixinUnifiedOrder(ConfigUtils.WXAPPappid, ConfigUtils.WXmch_id,initValue[0], initValue[1], ip, ConfigUtils.WXnotify_url, "APP", body, ConfigUtils.WXappkey);
					if(result.get("prepay_id")!=null){
						System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+result);
//						//result是微信返回的字段,详细见微信开发者文档
//						 Map<String, String> sign = WeiXinPay.getSign3(result);
//						 System.out.println("@@@@
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值