本文实例为大家分享了java微信公众号支付示例代码,供大家参考,具体内容如下
开始之前,先准备好:appid、商家号、商户密匙。
工具类:
MD5Util.java
`package` `com.yiexpress.core.utils.wechat;`
`import` `java.security.MessageDigest;`
`/**`
`* MD5工具类`
`*/`
`public` `class` `MD5Util {
`
`public` `final` `static` `String MD5(String s) {
`
`char` `hexDigits[]={
``'0'``,``'1'``,``'2'``,``'3'``,``'4'``,``'5'``,``'6'``,``'7'``,``'8'``,``'9'``,``'A'``,``'B'``,``'C'``,``'D'``,``'E'``,``'F'``};`
`try` `{
`
`byte``[] btInput = s.getBytes();`
`MessageDigest mdInst = MessageDigest.getInstance(``"MD5"``);`
`mdInst.update(btInput);`
`byte``[] md = mdInst.digest();`
`int` `j = md.length;`
`char` `str[] =` `new` `char``[j *` `2``];`
`int` `k =` `0``;`
`for` `(``int` `i =` `0``; i < j; i++) {
`
`byte` `byte0 = md[i];`
`str[k++] = hexDigits[byte0 >>>` `4` `&` `0xf``];`
`str[k++] = hexDigits[byte0 &` `0xf``];`
`}`
`String md5Str =` `new` `String(str);`
`return` `md5Str;`
`}` `catch` `(Exception e) {
`
`e.printStackTrace();`
`return` `null``;`
`}`
`}`
`}`
SapUtils.java
`package` `com.yiexpress.core.utils;`
`import` `java.lang.reflect.*;`
`import` `java.util.List;`
`import` `java.io.IOException;`
`import` `java.io.StringWriter;`
`import` `org.dom4j.Document;`
`import` `org.dom4j.DocumentHelper;`
`import` `org.dom4j.Element;`
`import` `org.dom4j.io.OutputFormat;`
`import` `org.dom4j.io.XMLWriter;`
`import` `org.slf4j.Logger;`
`import` `org.slf4j.LoggerFactory;`
`import` `org.springframework.util.StringUtils;`
`public` `class` `SapUtils {
`
`private` `static` `final` `Logger logger = LoggerFactory.getLogger(SapUtils.``class``);`
`/** 根据反射对javabean转成xml文件的格式`
`* 以类名为第一标签,所有属性作为第二节点,并放入对应的值,如果属性为空 就不放入该熟悉`
`* @param dto 传入的对象`
`* @param operationName 操作名称`
`* @return`
`*/`
`public` `static` `String formatToXml(Object dto,String operationName){
`
`logger.info(``"解析当前类{}为指定的xml文档格式的数据"``,dto.getClass().getName());`
`logger.info(``"当前的同步方法是,{}"``,operationName);`
`String result =` `null``;`
`Field fields[]=dto.getClass().getDeclaredFields();``//dto 是实体类名称`
`//DocumentHelper提供了创建Document对象的方法`
`Document document = DocumentHelper.createDocument();`
`//添加节点信息`
`String className=dto.getClass().getName();`
`// 操作的名称`
`Element rootElement = document.addElement(operationName);`
`try` `{
`
`Field.setAccessible(fields,` `true``);`
`for` `(``int` `i =` `0``; i < fields.length; i++) {
`
`//添加节点信息`
`if``(!StringUtils.isEmpty(fields[i].get(dto))){
`
`Class<?> type = fields[i].getType();`
`// 如果是list`
`if``(type == List.``class``){
`
`String listName = fields[i].getName();`
`createElement(rootElement, fields[i].get(dto),listName);`
`}`
`else``{
`
`Element element = rootElement.addElement(fields[i].getName());`
`element.setText((String) fields[i].get(dto));`
`}`
`}`
`}`
`// 设置XML文档格式`
`OutputFormat outputFormat = OutputFormat.createPrettyPrint();`
`// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1`
`outputFormat.setEncoding(``"UTF-8"``);`
`// outputFormat.setSuppressDeclaration(true); //是否生产xml头`
`outputFormat.setIndent(``true``);` `//设置是否缩进`
`outputFormat.setIndent(``" "``);` `//以四个空格方式实现缩进`
`outputFormat.setNewlines(``true``);` `//设置是否换行`
`StringWriter stringWriter =``null``;`
`// Writer fileWriter =null;`
`// xmlWriter是用来把XML文档写入字符串的(工具)`
`XMLWriter xmlWriter =` `null``;`
`try` `{
`
`// stringWriter字符串是用来保存XML文档的`
`stringWriter =` `new` `StringWriter();`
`// fileWriter = new FileWriter("D:\\modu11le.xml");`
`// xmlWriter是用来把XML文档写入字符串的(工具)`
`xmlWriter =` `new` `XMLWriter(stringWriter, outputFormat);`
`// 把创建好的XML文档写入字符串`
`xmlWriter.write(document);`
`//fileWriter.write(stringWriter.toString());`
`result=stringWriter.toString();`
`}` `catch` `(IOException e) {
`
`logger.error(``"写入数据失败"``);`
`throw` `new` `RuntimeException(``"写入数据失败"``+e);`
`}``finally``{
`
`try` `{
`
`if``(xmlWriter!=``null``){
`
`xmlWriter.flush();`
`xmlWriter.close();`
`}`
`/* if(fileWriter!=null){`
`fileWriter.flush();`
`fileWriter.close();`
`}*/`
`} catch (IOException e) {
`
`logger.error("关闭输出流出错");`
`throw new RuntimeException("关闭输出流出错"+e);`
`}`
`}`
`} catch (Exception e) {
`
`logger.error("添加xml的节点失败"+e);`
`}`
`logger.error("转换xml结束");`
`return result;`
`}`
`/**`
`* 添加类中的list`
`* @param element`
`* @param object`
`* @param name`
`* @return`
`* @throws IllegalArgumentException`
`* @throws IllegalAccessException`
`*/`
`public` `static` `Element createElement(Element element ,Object object,String name )` `throws` `IllegalArgumentException, IllegalAccessException{
`
`Element nameElement = element.addElement(name);`
`List info = (List)object;`
`for``(``int` `j=` `0``;j<info.size();j++){
`
`// 添加row的标签`
`Element rowElement = nameElement.addElement(``"row"``);`
`// 添加 对象的熟悉`
`Field fields[]=info.get(j).getClass().getDeclaredFields();``//dto 是实体类名称`
`Field.setAccessible(fields,` `true``);`
`for` `(``int` `i =` `0``; i < fields.length; i++) {
`
`//添加节点信息`
`if``(!StringUtils.isEmpty(fields[i].get(info.get(j)))){
`
`Element childElement = rowElement.addElement(fields[i].getName());`
`childElement.setText((String) fields[i].get(info.get(j)));`
`}`
`}`
`}`
`return` `element;`
`}`
`}`
UnifiedOrderRequest.java
`package` `com.yiexpress.core.utils.wechat;`
`public` `class` `UnifiedOrderRequest {
`
`private` `String appid;``// 公众账号ID`
`private` `String mch_id;``//商户号 `
`private` `String device_info;` `//设备号 否`
`private` `String nonce_str;``//随机字符串 `
`private` `String sign;``//签名 `
`private` `String sign_type;``//签名类型 `
`private` `String body;``//商品描述 `
`private` `String detail;``//商品详情 `
`private` `String attach;``//附加数据 `
`private` `String out_trade_no;``//商户订单号 `
`private` `String fee_type;``//标价币种 `
`private` `String total_fee;``//标价金额`
`private` `String spbill_create_ip;``//终端IP `
`private` `String time_start;``//交易起始时间 `
`private` `String time_expire;``//交易结束时间`
`private` `String goods_tag;``//订单优惠标记 `
`private` `String notify_url;``//通知地址 `
`private` `String trade_type;``//交易类型 `
`private` `String product_id;``//商品ID`
`private` `String limit_pay;``//指定支付方式`
`private` `String openid;``//用户标识 `
`public` `String getAppid() {
`
`return` `appid;`
`}`
`public` `void` `setAppid(String appid) {
`
`this``.appid = appid;`
`}`
`public` `String getMch_id() {
`
`return` `mch_id;`
`}`
`public` `void` `setMch_id(String mch_id) {
`
`this``.mch_id = mch_id;`
`}`
`public` `String getDevice_info() {
`
`return` `device_info;`
`}`
`public` `void` `setDevice_info(String device_info) {
`
`this``.device_info = device_info;`
`}`
`public` `String getNonce_str() {
`
`return` `nonce_str;`
`}`
`public` `void` `setNonce_str(String nonce_str) {
`
`this``.nonce_str = nonce_str;`
`}`
`public` `String getSign() {
`
`return` `sign;`
`}`
`public` `void` `setSign(String sign) {
`
`this``.sign = sign;`
`}`
`public` `String getSign_type() {
`
`return` `sign_type;`
`}`
`public` `void` `setSign_type(String sign_type) {
`
`this``.sign_type = sign_type;`
`}`
`public` `String getBody() {
`
`return` `body;`
`}`
`public` `void` `setBody(String body) {
`
`this``.body = body;`
`}`
`public` `String getDetail() {
`
`return` `detail;`
`}`
`public` `void` `setDetail(String detail) {
`
`this``.detail = detail;`
`}`
`public` `String getAttach() {
`
`return` `attach;`
`}`
`public` `void` `setAttach(String attach) {
`
`this``.attach = attach;`
`}`
`public` `String getOut_trade_no() {
`
`return` `out_trade_no;`
`}`
`public` `void` `setOut_trade_no(String out_trade_no) {
`
`this``.out_trade_no = out_trade_no;`
`}`
`public` `String getFee_type() {
`
`return` `fee_type;`
`}`
`public` `void` `setFee_type(String fee_type) {
`
`this``.fee_type = fee_type;`
`}`
`public` `String getTotal_fee() {
`
`return` `total_fee;`
`}`
`public` `void` `setTotal_fee(String total_fee) {
`
`this``.total_fee = total_fee;`
`}`
`public` `String getSpbill_create_ip() {
`
`return` `spbill_create_ip;`
`}`
`public` `void` `setSpbill_create_ip(String spbill_create_ip) {
`
`this``.spbill_create_ip = spbill_create_ip;`
`}`
`public` `String getTime_start() {
`
`return` `time_start;`
`}`
`public` `void` `setTime_start(String time_start) {
`
`this``.time_start = time_start;`
`}`
`public` `String getTime_expire() {
`
`return` `time_expire;`
`}`
`public` `void` `setTime_expire(String time_expire) {
`
`this``.time_expire = time_expire;`
`}`
`public` `String getGoods_tag() {
`
`return` `goods_tag;`
`}`
`public` `void` `setGoods_tag(String goods_tag) {
`
`this``.goods_tag = goods_tag;`
`}`
`public` `String getNotify_url() {
`
`return` `notify_url;`
`}`
`public` `void` `setNotify_url(String notify_url) {
`
`this``.notify_url = notify_url;`
`}`
`public` `String getTrade_type() {
`
`return` `trade_type;`
`}`
`public` `void` `setTrade_type(String trade_type) {
`
`this``.trade_type = trade_type;`
`}`
`public` `String getProduct_id() {
`
`return` `product_id;`
`}`
`public` `void` `setProduct_id(String product_id) {
`
`this``.product_id = product_id;`
`}`
`public` `String getLimit_pay() {
`
`return` `limit_pay;`
`}`
`public` `void` `setLimit_pay(String limit_pay) {
`
`this``.limit_pay = limit_pay;`
`}`
`public` `String getOpenid() {
`
`return` `openid;`
`}`
`public` `void` `setOpenid(String openid) {
`
`this``.openid = openid;`
`}`
`}`
UnifiedOrderRespose.java
`package` `com.yiexpress.core.utils.wechat;`
`public` `class` `UnifiedOrderRespose {
`
`private` `String return_code;` `//返回状态码`
`private` `String return_msg;` `//返回信息`
`private` `String appid;` `//公众账号ID`
`private` `String mch_id;` `//商户号`
`private` `String device_info;` `//设备号`
`private` `String nonce_str;` `//随机字符串`
`private` `String