300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java微信公众号支付开发平台_微信公众号支付demo 微信公众号支付Java DEMO

java微信公众号支付开发平台_微信公众号支付demo 微信公众号支付Java DEMO

时间:2019-11-10 16:58:12

相关推荐

java微信公众号支付开发平台_微信公众号支付demo 微信公众号支付Java DEMO

1.5.4微信验证的控制方法:

/**

* 微信验证

* 请填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证

* 验证服务器地址的有效性

* 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

* 参数 描述

* signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

* timestamp 时间戳

* nonce 随机数

* echostr 随机字符串

* @return

* @throwsIOException

*/

@RequestMapping(value = "/weixin/verify",method = RequestMethod.GET)

public voidweixinVerify(Model model, WeixinVerifyDto verify, HttpServletResponse response)throwsIOException{

PrintWriter out = response.getWriter();

if (SignUtil.checkSignature(verify.getSignature(), verify.getTimestamp(),verify.getNonce())) {

model.addAttribute("echoStr", verify.getEchostr());

out.print(verify.getEchostr());

}

//return "verify";

out.close();

out = null;

}

SignUtil

import java.security.MessageDigest;

importjava.security.NoSuchAlgorithmException;

import java.util.Arrays;

public class SignUtil {

// 与接口配置信息中的Token要一致

private static String token = "weixinCourse";

/**

* 验证签名

*

* @param signature

* @param timestamp

* @param nonce

* @return

*/

public static boolean checkSignature(String signature, String timestamp,

String nonce) {

String[] arr = new String[] { token, timestamp, nonce };

// 将token、timestamp、nonce三个参数进行字典序排序

Arrays.sort(arr);

StringBuilder content = new StringBuilder();

for (int i = 0; i < arr.length; i++) {

content.append(arr[i]);

}

MessageDigest md = null;

String tmpStr = null;

try {

md =MessageDigest.getInstance("SHA-1");

// 将三个参数字符串拼接成一个字符串进行sha1加密

byte[] digest = md.digest(content.toString().getBytes());

tmpStr = byteToStr(digest);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

content = null;

// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信

return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;

}

/**

* 将字节数组转换为十六进制字符串

*

* @param byteArray

* @return

*/

private static String byteToStr(byte[] byteArray) {

String strDigest = "";

for (int i = 0; i < byteArray.length; i++) {

strDigest += byteToHexStr(byteArray[i]);

}

return strDigest;

}

/**

* 将字节转换为十六进制字符串

*

* @param mByte

* @return

*/

private static String byteToHexStr(byte mByte) {

char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',

'B', 'C', 'D', 'E', 'F' };

char[] tempArr = new char[2];

tempArr[0] = Digit[(mByte >>> 4) & 0X0F];

tempArr[1] = Digit[mByte & 0X0F];

String s = new String(tempArr);

return s;

}

}

WeixinVerifyDto

/**

* 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

* 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

* 加密/校验流程如下:

* 1. 将token、timestamp、nonce三个参数进行字典序排序

* 2. 将三个参数字符串拼接成一个字符串进行sha1加密

* 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

* @author HuangC

*

*/

public classWeixinVerifyDto {

/**

* 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

*/

privateString signature;

/**

* 时间戳

*/

privateString timestamp;

/**

* 随机数

*/

privateString nonce;

/**

* 随机字符串

*/

privateString echostr;

publicString getSignature() {

return signature;

}

publicvoidsetSignature(String signature){

this.signature = signature;

}

publicString getTimestamp() {

return timestamp;

}

publicvoidsetTimestamp(String timestamp){

this.timestamp = timestamp;

}

publicString getNonce() {

return nonce;

}

publicvoidsetNonce(String nonce){

this.nonce = nonce;

}

publicString getEchostr() {

return echostr;

}

publicvoidsetEchostr(String echostr){

this.echostr = echostr;

}

}

2.测试:

找到PayUtils这个文件。增加下面的代码:

publicstaticvoidmain(String[] args){

PayPackage payPackage = new PayPackage();

PayQrCode qrCode = new PayQrCode("3214123423");

payPackage.setAppid(Configure.getAppid());

payPackage.setAttach("test");

payPackage.setBody("JSAPI测试支付");

payPackage.setNonce_str(qrCode.getNonce_str());

payPackage.setMch_id(qrCode.getMch_id());

payPackage.setOpenid("o0IrGwYeRrTbko6LlV0rOoanJHbc");

payPackage.setOut_trade_no(UUID.randomUUID().toString().replace("-", ""));

payPackage.setProduct_id(qrCode.getProduct_id());

payPackage.setSpbill_create_ip("14.23.150.211");

payPackage.setTotal_fee("1");

payPackage.setTrade_type("JSAPI");

String replyXml = PayUtils.generatePayNativeReplyXML(payPackage);

}

如果顺利的话就能获取下面的xml格式的String

以上就是微信公众号支付demo的内容,更多更热门的微信公众号素材,欢迎浏览Hi商学院网站。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。