alipaynotify java_AlipayNotify.java

本文介绍了一个用于处理支付宝通知的Java类——AlipayNotify。该类主要用于验证来自支付宝的通知消息的有效性和合法性,包括验证消息签名及确认消息来源。文章提供了详细的实现代码,并解释了各个方法的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package tech.yunland.shop.domain.until;

/**

* Created by v on 17-9-2.

*/

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.Map;

/* *

*类名:AlipayNotify

*功能:支付宝通知处理类

*详细:处理支付宝各接口通知返回

*版本:3.3

*日期:2012-08-17

*说明:

*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

*该代码仅供学习和研究支付宝接口使用,只是提供一个参考

*************************注意*************************

*调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常

*/

public class AlipayNotify {

/**

* 支付宝消息验证地址

*/

private static final String HTTPS_VERIFY_URL = "https://mapi.alipay.com/gateway.do?service=notify_verify&";

/**

* 验证消息是否是支付宝发出的合法消息

*

* @param params 通知返回来的参数数组

* @return 验证结果

*/

public static boolean verify(Map params) {

//判断responsetTxt是否为true,isSign是否为true

//responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关

//isSign不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关

String responseTxt = "false";

if (params.get("notify_id") != null) {

String notify_id = params.get("notify_id");

responseTxt = verifyResponse(notify_id);

}

String sign = "";

if (params.get("sign") != null) {

sign = params.get("sign");

}

boolean isSign = getSignVeryfy(params, sign);

//写日志记录(若要调试,请取消下面两行注释)

//String sWord = "responseTxt=" + responseTxt + "\n isSign=" + isSign + "\n 返回回来的参数:" + AlipayCore.createLinkString(params);

//AlipayCore.logResult(sWord);

if (isSign && responseTxt.equals("true")) {

return true;

} else {

return false;

}

}

/**

* 根据反馈回来的信息,生成签名结果

*

* @param Params 通知返回来的参数数组

* @param sign 比对的签名结果

* @return 生成的签名结果

*/

public static boolean getSignVeryfy(Map Params, String sign) {

//过滤空值、sign与sign_type参数

Map sParaNew = AlipayCore.paraFilter(Params);

//获取待签名字符串

String preSignStr = AlipayCore.createLinkString(sParaNew);

//获得签名验证结果

boolean isSign = false;

if (AlipayConfig.sign_type.equals("MD5")) {

isSign = MD5.verify(preSignStr, sign, AlipayConfig.key, AlipayConfig.input_charset);

}

return isSign;

}

/**

* 获取远程服务器ATN结果,验证返回URL

*

* @param notify_id 通知校验ID

* @return 服务器ATN结果

* 验证结果集:

* invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空

* true 返回正确信息

* false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟

*/

public static String verifyResponse(String notify_id) {

//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求

String partner = AlipayConfig.partner;

String veryfy_url = HTTPS_VERIFY_URL + "partner=" + partner + "&notify_id=" + notify_id;

return checkUrl(veryfy_url);

}

/**

* 获取远程服务器ATN结果

*

* @param urlvalue 指定URL路径地址

* @return 服务器ATN结果

* 验证结果集:

* invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空

* true 返回正确信息

* false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟

*/

private static String checkUrl(String urlvalue) {

String inputLine = "";

try {

URL url = new URL(urlvalue);

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection

.getInputStream()));

inputLine = in.readLine().toString();

} catch (Exception e) {

e.printStackTrace();

inputLine = "";

}

return inputLine;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值