精华内容
下载资源
问答
  • JAVA实现微信支付功能代码说明 https://blog.csdn.net/liuting52001/article/details/103642371
  • 主要介绍了Java实现支付宝之第三方支付宝即时到账支付功能的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了java后台实现支付宝对账功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家个参考。一起跟随小编过来看看吧
  • 主要介绍了Java spring boot 实现支付宝支付功能,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • java 支付宝支付功能

    2016-12-08 16:34:37
    java 支付宝支付功能 1、及时到账;2、移动支付
  • 这是java使用支付宝支付功能demo笔记,主要是下载了官方支付demo,然后进行参数调整的笔记。
  • 本项目已完美集成支付宝扫码支付,导入项目后在zfbinfo.properties根据要求填写相对应的appid和密钥就可执行,项目包括sdk,和已经写好的demo以及前端展示二维码页面
  • java实现微信支付功能

    2020-08-25 14:52:54
    主要为大家详细介绍了java实现微信支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Java调用微信支付功能的方法示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Java实现支付宝扫码支付完整过程(沙箱测试环境)及其项目源码 项目描述 最近想开发一个关于支付网页的小项目,记录一下自己碰到的坑,这里我是通过Java在支付宝测试环境里面实现支付宝支付完整过程。 运行环境 ...
  • JAVA支付宝扫码支付

    2019-12-25 15:46:02
    网站面对面网页支付以及二维码扫码支付,PC网页支付功能和生成二维码图片扫码支付功能。使用Springboot框架编写。支付宝沙箱环境已配置完成,下载后解压,idea可直接启动。
  • Java实现对支付宝即时到账接口调用。
  • Java支付宝微信银联和H5支付功能,是电商或支付功能必备神器,导入即,无需更改,注释全面,坐等你来拿
  • 最近在微信公众号支付,看文档的,感觉踩了不少坑,为了避免后人采坑,所以写下此demo----微信支付功能实现(微信公众号支付)
  • Java实现支付宝、微信、银联支付项目实例源码
  • 使用ssm框架实现支付宝支付功能。「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的源代码和sql文件都有
  • 本篇文章主要介绍了JAVA微信扫码支付模式二线上支付功能实现以及回调,这里整理了详细的代码,有需要的小伙伴可以参考下。
  • 主要为大家详细介绍了java服务器端微信、支付宝支付和退款功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了java实现微信扫码支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • JAVA微信支付

    2015-07-28 11:10:43
    简单的一个微信支付项目.适合新手开发.下载后请看resource下的注意事项!!!已经经过测试可以完全运行.如果遇到什么问题可以留言我 帮你解决.
  • 本篇文章主要介绍了JAVA微信扫码支付模式一线下支付功能实现,具有一定的参考价值,有需要的可以了解一下。
  • 主要为大家详细介绍了javaweb在线支付功能的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • JAVA实现微信支付功能

    万次阅读 多人点赞 2018-12-27 15:11:59
    这两天,需要接入微信支付功能。由于我是公众号开发,因此,我选择的微信支付方式是JSAPI支付方式。 二,解决方案 2.1 配置微信平台 ①配置微信公众平台 登录微信公众平台=》公众号设置=》功能设置=》网页授权域名 ...

    一,问题

    这两天,需要接入微信支付功能。由于我是公众号开发,因此,我选择的微信支付方式是JSAPI支付方式。

    二,解决方案

    2.1 配置微信平台

    ①配置微信公众平台

    登录微信公众平台=》公众号设置=》功能设置=》网页授权域名
    

    在这里插入图片描述

    在这里插入图片描述

    ②配置微信商家平台

    产品中心=》开发配置
    

    在这里插入图片描述

    在这里插入图片描述

    2.2 后台代码的实现

    JSAPI官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
    

    ①先去官方下载SDK,并导进项目中

    地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
    

    在这里插入图片描述

    ②准备好11个参数

    appid:商家平台ID。在微信的平台上有
    body:商品描述。
    mch_id:商户ID。在微信的平台上有
    nonce_str:随机字符串,UUID就好了。
    openid:用户标识。因为这边是用户已经登录成功了。所以在session中就能拿到。
    out_trade_no:商户订单号
    spbill_create_ip:终端IP。这个可以从请求头中拿到
    total_fee:支付金额。单位是分。
    trade_type:交易类型。这里我填JSAPI
    notify_url:通知地址。就是用户支付成功之后,微信访问你的哪个接口,跟你传递支付成功的相关信息。
    
    sign:签名。这个签名它是由上面的10个参数计算得出的。
    

    ③源码
    sendPay类:

    import java.io.IOException;
    import java.io.InputStream;
    import java.math.BigDecimal;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.http.auth.AUTH;
    import org.hamcrest.core.Is;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.jc.util.wxPay.WXPayUtil;
    import com.sun.xml.internal.fastinfoset.Encoder;
    
    import controller.AuthUtil;
    import net.sf.json.JSONObject;
    
    @Controller
    @RequestMapping("/pay")
    public class sendPay {
     
    	/**
    	 * @Description 微信浏览器内微信支付/公众号支付(JSAPI)
    	 * @param request
    	 * @param code
    	 * @return Map
    	 */
    	@RequestMapping(value = "orders")
    	public @ResponseBody Map<String, String> orders(HttpServletRequest request, HttpServletResponse response) {
    		try {
    			 
    			String openId = "用户的openid";
    
    			// 拼接统一下单地址参数
    			Map<String, String> paraMap = new HashMap<String, String>();
    			// 获取请求ip地址
    			String ip = request.getHeader("x-forwarded-for");
    			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    				ip = request.getHeader("Proxy-Client-IP");
    			}
    			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    				ip = request.getHeader("WL-Proxy-Client-IP");
    			}
    			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    				ip = request.getRemoteAddr();
    			}
    			if (ip.indexOf(",") != -1) {
    				String[] ips = ip.split(",");
    				ip = ips[0].trim();
    			}
    
    			paraMap.put("appid", AuthUtil.APPID); // 商家平台ID
    			paraMap.put("body", "纯情小店铺-薯条"); // 商家名称-销售商品类目、String(128)
    			paraMap.put("mch_id", AuthUtil.MCHID); // 商户ID
    			paraMap.put("nonce_str", WXPayUtil.generateNonceStr()); // UUID
    			paraMap.put("openid", openId);
    			paraMap.put("out_trade_no", UUID.randomUUID().toString().replaceAll("-", ""));// 订单号,每次都不同
    			paraMap.put("spbill_create_ip", ip);
    			paraMap.put("total_fee", "1"); // 支付金额,单位分
    			paraMap.put("trade_type", "JSAPI"); // 支付类型
    			paraMap.put("notify_url", "用户支付完成后,你想微信调你的哪个接口");// 此路径是微信服务器调用支付结果通知路径随意写
    			String sign = WXPayUtil.generateSignature(paraMap, AuthUtil.PATERNERKEY);
    			paraMap.put("sign", sign);
    			String xml = WXPayUtil.mapToXml(paraMap);// 将所有参数(map)转xml格式
    
    			// 统一下单 https://api.mch.weixin.qq.com/pay/unifiedorder
    			String unifiedorder_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    
    			System.out.println("xml为:" + xml);
    
    			// String xmlStr = HttpRequest.sendPost(unifiedorder_url,
    			// xml);//发送post请求"统一下单接口"返回预支付id:prepay_id
    
    			String xmlStr = HttpRequest.httpsRequest(unifiedorder_url, "POST", xml);
    
    			System.out.println("xmlStr为:" + xmlStr);
    
    			// 以下内容是返回前端页面的json数据
    			String prepay_id = "";// 预支付id
    			if (xmlStr.indexOf("SUCCESS") != -1) {
    				Map<String, String> map = WXPayUtil.xmlToMap(xmlStr);
    				prepay_id = (String) map.get("prepay_id");
    			}
    
    			Map<String, String> payMap = new HashMap<String, String>();
    			payMap.put("appId", AuthUtil.APPID);
    			payMap.put("timeStamp", WXPayUtil.getCurrentTimestamp() + "");
    			payMap.put("nonceStr", WXPayUtil.generateNonceStr());
    			payMap.put("signType", "MD5");
    			payMap.put("package", "prepay_id=" + prepay_id);
    			String paySign = WXPayUtil.generateSignature(payMap, AuthUtil.PATERNERKEY);
    			payMap.put("paySign", paySign);
    			//将这个6个参数传给前端
    			return payMap;
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    	/**
    	 * @Title: callBack
    	 * @Description: 支付完成的回调函数
    	 * @param:
    	 * @return:
    	 */
    	@RequestMapping("/notify")
    	public String callBack(HttpServletRequest request, HttpServletResponse response) {
    		// System.out.println("微信支付成功,微信发送的callback信息,请注意修改订单信息");
    		InputStream is = null;
    		try {
    
    			is = request.getInputStream();// 获取请求的流信息(这里是微信发的xml格式所有只能使用流来读)
    			String xml = WXPayUtil.InputStream2String(is);
    			Map<String, String> notifyMap = WXPayUtil.xmlToMap(xml);// 将微信发的xml转map
    			
    			System.out.println("微信返回给回调函数的信息为:"+xml);
    			
    			if (notifyMap.get("result_code").equals("SUCCESS")) {
    				String ordersSn = notifyMap.get("out_trade_no");// 商户订单号
    				String amountpaid = notifyMap.get("total_fee");// 实际支付的订单金额:单位 分
    				BigDecimal amountPay = (new BigDecimal(amountpaid).divide(new BigDecimal("100"))).setScale(2);// 将分转换成元-实际支付金额:元
    
    				/*
    				 * 以下是自己的业务处理------仅做参考 更新order对应字段/已支付金额/状态码
    				 */
    				System.out.println("===notify===回调方法已经被调!!!");
    				
    			}
    			
    			// 告诉微信服务器收到信息了,不要在调用回调action了========这里很重要回复微信服务器信息用流发送一个xml即可
    			response.getWriter().write("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (is != null) {
    				try {
    					is.close();
    				} catch (IOException e) { 
    					e.printStackTrace();
    				}
    			}
    		}
    		
    		return null;
    	}
    
    }
    
    

    HttpRequest类:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    
    import javax.net.ssl.HttpsURLConnection;
    
    public class HttpRequest {
    	/**
    	 * 向指定URL发送GET方法的请求
    	 * 
    	 * @param url
    	 *            发送请求的URL
    	 * @param param
    	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return URL 所代表远程资源的响应结果
    	 */
    	public static String sendGet(String url, String param) {
    		String result = "";
    		BufferedReader in = null;
    		try {
    			String urlNameString = url + "?" + param;
    			System.out.println(urlNameString);
    			URL realUrl = new URL(urlNameString);
    			// 打开和URL之间的连接
    			URLConnection connection = realUrl.openConnection();
    			// 设置通用的请求属性
    			connection.setRequestProperty("accept", "*/*");
    			connection.setRequestProperty("connection", "Keep-Alive");
    			connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 建立实际的连接
    			connection.connect();
    			// 获取所有响应头字段
    			Map<String, List<String>> map = connection.getHeaderFields();
    			// 遍历所有的响应头字段
    			for (String key : map.keySet()) {
    				System.out.println(key + "--->" + map.get(key));
    			}
    			// 定义 BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			String line;
    			while ((line = in.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			System.out.println("发送GET请求出现异常!" + e);
    			e.printStackTrace();
    		}
    		// 使用finally块来关闭输入流
    		finally {
    			try {
    				if (in != null) {
    					in.close();
    				}
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    		}
    		return result;
    	}
    
    	/**
    	 * 向指定 URL 发送POST方法的请求
    	 * 
    	 * @param url
    	 *            发送请求的 URL
    	 * @param param
    	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return 所代表远程资源的响应结果
    	 */
    	public static String sendPost(String url, String param) {
    		PrintWriter out = null;
    		BufferedReader in = null;
    		String result = "";
    		try {
    			URL realUrl = new URL(url);
    			// 打开和URL之间的连接
    			URLConnection conn = realUrl.openConnection();
    			// 设置通用的请求属性
    			conn.setRequestProperty("accept", "*/*");
    			conn.setRequestProperty("connection", "Keep-Alive");
    			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 发送POST请求必须设置如下两行
    			conn.setDoOutput(true);
    			conn.setDoInput(true);
    			// 获取URLConnection对象对应的输出流
    			out = new PrintWriter(conn.getOutputStream());
    			// 发送请求参数
    			out.print(param);
    			// flush输出流的缓冲
    			out.flush();
    			// 定义BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    			String line;
    			while ((line = in.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			System.out.println("发送 POST 请求出现异常!" + e);
    			e.printStackTrace();
    		}
    		// 使用finally块来关闭输出流、输入流
    		finally {
    			try {
    				if (out != null) {
    					out.close();
    				}
    				if (in != null) {
    					in.close();
    				}
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			}
    		}
    		return result;
    	}
    
    	/**
    	 * post请求并得到返回结果
    	 * 
    	 * @param requestUrl
    	 * @param requestMethod
    	 * @param output
    	 * @return
    	 */
    	public static String httpsRequest(String requestUrl, String requestMethod, String output) {
    		try { 
    			URL url = new URL(requestUrl);
    			HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    			connection.setDoOutput(true);
    			connection.setDoInput(true);
    			connection.setUseCaches(false);
    			connection.setRequestMethod(requestMethod);
    			if (null != output) {
    				OutputStream outputStream = connection.getOutputStream();
    				outputStream.write(output.getBytes("UTF-8"));
    				outputStream.close();
    			}
    			// 从输入流读取返回内容
    			InputStream inputStream = connection.getInputStream();
    			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
    			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    			String str = null;
    			StringBuffer buffer = new StringBuffer();
    			while ((str = bufferedReader.readLine()) != null) {
    				buffer.append(str);
    			}
    			bufferedReader.close();
    			inputStreamReader.close();
    			inputStream.close();
    			inputStream = null;
    			connection.disconnect();
    			return buffer.toString();
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		return "";
    	}
    }
    

    AuthUtil类

    import java.io.IOException;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    import net.sf.json.JSONObject;
    public class AuthUtil {
    	public static final String APPID = "平台ID";
    	public static final String APPSECRET = "平台密钥";
    	public static final String MCHID = "商家ID";
    	public static final String PATERNERKEY = "商家密钥";
    	
    	
    	public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException {
    		JSONObject jsonObject = null;
    		// 首先初始化HttpClient对象
    		DefaultHttpClient client = new DefaultHttpClient();
    		// 通过get方式进行提交
    		HttpGet httpGet = new HttpGet(url);
    		// 通过HTTPclient的execute方法进行发送请求
    		HttpResponse response = client.execute(httpGet);
    		// 从response里面拿自己想要的结果
    		HttpEntity entity = response.getEntity();
    		if (entity != null) {
    			String result = EntityUtils.toString(entity, "UTF-8");
    			jsonObject = jsonObject.fromObject(result);
    		}
    		// 把链接释放掉
    		httpGet.releaseConnection();
    		return jsonObject;
    	}
    }
    

    2.3 前端的实现

    这是只用一个jsp页面来做测试

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="./js/jquery-1.11.0.min.js"></script>
    <title>微信支付JSP</title>
    </head>
    <body> 
    	<input type="button" value="进行微信支付" id="payId">
    
    	<script type="text/javascript">
    	
    		$(function(){
    			var appId,timeStamp,nonceStr,package,signType,paySign; 
    			
    			$("#payId").click(function(){
    				pay();
    			});
    			
    			//去后台拿六个参数
    			function pay(){   
    				var url = "http://localhost:8082/WeChat/pay/orders";
    			  	$.get(url,function(result) {	
    		  				appId = result.appId;
    						timeStamp = result.timeStamp;
    						nonceStr = result.nonceStr;
    						package = result.package;
    						signType = result.signType;
    						paySign = result.paySign;
    						
    						if (typeof WeixinJSBridge == "undefined") {
    							if (document.addEventListener) {
    								document.addEventListener('WeixinJSBridgeReady',
    										onBridgeReady, false);
    							} else if (document.attachEvent) {
    								document.attachEvent('WeixinJSBridgeReady',
    										onBridgeReady);
    								document.attachEvent('onWeixinJSBridgeReady',
    										onBridgeReady);
    							}
    							alert("请在微信上进行支付操作!");
    							onBridgeReady();
    						} else { 
    							onBridgeReady();
    						}
    					});
    				}
    			//去微信那边发起支付请求
    			function onBridgeReady(){
    				
    				 alert("appId:"+appId+" "+"timeStamp:"+timeStamp+" "+"nonceStr:"+nonceStr+" "+"package:"+package+" "+"signType:"+signType+" "+"paySign:"+paySign+" ");
    				
    				  WeixinJSBridge.invoke( 'getBrandWCPayRequest', {
    					  "appId":appId,     //公众号名称,由商户传入     
    			          "timeStamp":timeStamp,         //时间戳,自1970年以来的秒数     
    			          "nonceStr":nonceStr, //随机串     
    			          "package":package,     
    			          "signType":signType,         //微信签名方式:     
    			          "paySign":paySign //微信签名 
    			         }, 
    			         function(res){      
    			      	   if(res.err_msg == "get_brand_wcpay_request:ok" ) {
    			                 //alert('支付成功');
    			                 console.log("支付成功");
    			                 //支付成功后跳转的页面
    			             }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
    			            	 alert('支付取消');
    			             }else if(res.err_msg == "get_brand_wcpay_request:fail"){
    			            	 alert('支付失败');
    			            	 
    			            	 alert(JSON.stringify(res));
    			            	 
    			                 WeixinJSBridge.call('closeWindow');
    			             } //使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
    			   });    
    			}
    		})
    </script>
    
    </body>
    </html>
    

    三,总结

    虽然第一次看官方文档很乱,信息量很多,但仔细总结一下,其实就下面这点流程而已。
    

    在这里插入图片描述

    最后,很感谢网上一位大哥分享了他的经验。
    大哥链接:https://blog.csdn.net/javaYouCome/article/details/79473743

    展开全文
  • 针对微信小程序的支付和退款的服务端功能开发,java语言
  • 本文给大家分享一段java核心代码实现支付充值的通用流程,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
  • 调用支付宝和微信支付源码(java源码),nativePay为目前两种支付的入口。支付渠道1.微信 2.支付宝,包括微信和支付宝异步回调方法,sign签名验证等method
  • Java实现微信支付demo

    2019-04-01 17:25:43
    使用Javaweb实现的微信支付demo,只需要修改src->util->PayConfig文件里的配置即可
  • 微信小程序-JAVA实现微信支付功能(微信支付2.0) 一.前言  本博客主要介绍JAVA后台与微信小程序(UNI-APP或者原生微信小程序)的微信支付的实现,如果是APP或者H5的开发暂时不支持,具体应用场景如下图: 不同...

    微信小程序-JAVA实现微信支付功能(微信支付2.0)

     

    一.前言

     本博客主要介绍JAVA后台与微信小程序(UNI-APP或者原生微信小程序)的微信支付的实现,如果是APP或者H5的开发暂时不支持,具体应用场景如下图:

     

     

     不同场景调用的微信支付接口不一致,请务必了解,如果您是开发的APP或者H5,请出门右拐(哈哈),此次介绍的微信支付是基于支付类型

    为JSAPI实现的,该支付方式支持微信如上图所说的线下场所、公众号、小程序、PC网站、移动端网站,具体以微信支付官网为主:

    https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml,本此开发使用的是微信支付的V2版,V3版暂未尝试(有兴趣的可以自己尝试)

     

     

    二.开发前准备与要求

    1.JAVA后台环境准备

    ①.前往https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1,下载JAVA版的SDK,该SDK,帮我们实现了许多参数的封装,

    避免我们自己拼接微信接口的参数,当然如果你有时间也可以自己拼装,请求参数,具体拼接还是看第一幅图上面的微信支付官网。

     

     

     

     

     

     

     ②.下载好之后解压,然后打开里里面的readme.md文件,具体如下

     

     

     该SDK写了很多的工具类,我们在开发的时候直接调用官方提供的SDK就行了,然后打开POM.xml文件,

     

     

     将这些SDK所需的JAR包引入到项目中,不然会报错,如果不想使用SLFJ日志,可以将相关的代码注释,不影响主体功能的使用。

    然后将解压好的文件里面的java文件导入到项目中去,这里笔者就不演示了,你可以单独创建一个package将这些java文件放进去,

    然后还需要一个IpUtil工具类,为后面的开发做准备,代码入下:

     

     

     ③.主业务逻辑代码-配置类(******)

      先介绍一下,下面的代码本地JAVA后台代码的核心代码,很重要,请认真阅读:

      准备一个配置类,该类需要继承SDK中的WXPayConfig类,如下,这个配置类比较重要,里面的参数会决定你微信支付接口调用的

    成功与否。

    下面开始介绍一下各个参数的作用,首先注释掉的构造函数是用来加载微信支付证书,至于微信支付证书在哪里下载笔者后面会介绍,如果你只是要实现微信支付的功能是不需要证书的,

    笔者这里把这里注释掉也是一开始以为微信支付需要这个证书的,然后去微信社区里面找了很久发现微信支付并不需要;这里就随便简单介绍一下了,后面再提一下(不是微信支付的重点)。

    参数1:AppID也就是你小程序的AppID,这里不介绍,如果这个不知道登录微信公共平台可以查询(不演示了,不懂百度),参数2:MchID:商户号,如下图所示

     

     

     

    商户号的注册网址https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal,也可以直接百度微信商户平台,进入就可以了,进入之后走微信的注册流程

    然后注册好了之后就可以查询到自己的商户号了,然后你需要去微信公众平台如上图的页面将你的小程序和你的微信商户号进行关联,具体流程未知(不是我申请的)但是

    这是微信支付的前提条件之一.将你注册好的商户号放到配置文件中.

    参数3:微信APIKEY,在微信商户平台中的商户中心获取,具体如下,之前说的证书也是在这里获取,注意处理API秘钥还有一个叫APIV4的秘钥,我们开发所需要的是叫API秘钥,

    至于APIV4是干嘛的我也不知道,然后将这里的API秘钥放到配置类中,

    其他参数:照着上面的敲一遍就行了.

     

     

     

    ④.主业务逻辑代码-参数组建

     然后就是我们主要的逻辑代码的编写了,在写之前还需要准备的环境有,微信商户平台确认你的商户号中授权了你的小程序,

     

     

     接口目录的配置,也是在微信商户平台上配置,该目录的配置的路径就是我们前台小程序点击支付发起的微信支付请求的地址(实质也就是我们发起微信支付订单的地址),

    最好精确到你的请求路径,不要写你的服务器路径.

     

     

     商户平台的中心我的产品里面有一个JSAPI的产品,请将其开通,不然支付接口发出错误请求,也可以在产品中心

    中查看我们的商户号.

     

     

     好了基本要配置的东西就这么多了,上面要配置的东西比较容易导致我们出错的东西就是要开通JSAPI产品以及APIKEY的

    配置,特别是APIKEY是最容易导致出错的配置,笔者在这里被坑了一天.

    主逻辑代码开始:

    这是逻辑代码,上面的RequestMapping配置的地址也就是我们刚才在微信商户平台配置的目录地址,请确保其一致

     

     

     参数拼接

     

    具体的参数规则请参考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1中的API列表中的统一下单,

    下单成功业务逻辑处理,

     

     

     

    使用我们上面下单成功之后的下单id再次进行微信签名,操作如下

     

     

     然后一切处理好之后我们将结果返回到前台,现在来看前台的代码

     

     然后就会调用我们下单接口中的回调地址,笔者这里建议大家将回调地址也配置到那个微信商户平台那个目录的地址

    中去,回调地址,主要是用来给我们处理业务逻辑的具体代码入下:

     

     

     

     

     我们在这个map中可以拿到我们想要的东西,具体什么参数看官网:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8

    这里示例一下

     

     如果不返回就会造成下面的结果

     

     微信支付完毕.

    三.总结(*****)

    我们编写的代码必须放到服务器中才能正确的运行,在本地是不行的(当然如果你使用的内网穿透除外,)然后笔者在弄微信支付最让人头疼的坑就是那个APIKEY

    然后下单接口一直报签名失败,签名错误什么的,如果你在别的参数确认无误的情况下,还是签名失败,请重置你的APIKEY,好的微信支付就介绍到这里了, 如果大家有

    什么不懂的,欢迎在我的博客下方留言。。。

    展开全文
  • JAVA实现微信支付功能 jar包。含官方jar包 java源代码说明在https://blog.csdn.net/liuting52001/article/details/103642371中
  • 主要为大家详细介绍了java实现在SSM下使用支付宝扫码支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,111
精华内容 28,444
关键字:

如何用java做支付功能

java 订阅