支付宝服务端如何接收通知及验签?
以支付接口接收通知并处理为例。
Java 调用示例
Java 异步验签示例
//获取支付宝POST过来反馈信息
Map< String , String > params = new HashMap < String , String > ();
Map requestParams = request.getParameterMap();
for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){
String name = (String)iter.next();
String[] values = (String [])requestParams.get(name);
String valueStr = "";
for(int i = 0;i < values.length;i ++ ){
valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put (name,valueStr);
}
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1 (params,alipaypublicKey, "UTF-8","RSA2");
Java异步验签示例(证书)
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext ();) {
String name = ( String )iter.next();
String[] values = (String[])requestParams.get(name);
String valueStr="";
for(int i = 0;i < values.length; i++){
valueStr = (i== values.length-1)?valueStr+values[i]:valueStr+values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name,valueStr);
}
//切记alipayPublicCertPath是支付宝公钥证书路径,请去open.alipay.com对应应用下载。
//boolean AlipaySignature.rsaCertCheckV1(Map<String, String> params, String publicKeyCertPath, String charset,String signType)
boolean flag = AlipaySignature.rsaCertCheckV1(params,alipayPublicCertPath,"UTF-8","RSA2");
PHP 调用示例
PHP异步验签示例
php语言公钥与公钥证书验签方法相同。
$aop = new AopClient;
$aop->alipayrsaPublicKey = '请填写支付宝公钥/支付宝公钥证书路径';
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
C#调用示例
C#异步验签示例
验签方法中 keyFromFile 必传 false,否则验签失败。
// 获 取 支 付 宝 POST 过 来 通 知 消 息 , 并 以 “参 数 名 = 参 数 值 ” 的 形 式 组 成 数 组
// request 回 来 的 信 息 组 成 的 数 组
public Dictionary<string,string> GetRequestPost()
{
int i = 0 ;
IDictionary<string,string> sArray = new IDictionary<string,string>();
NameValueCollection coll;
// Load Form variables into NameValueCollection variable .
coll = Request.Form ;
//Get names of all forms into a string array .
String[] requestItem = coll.AllKeys;
for (i = 0;i < requestItem.Length ; i++)
{
sArray.Add( requestItem[i], Request.Form[requestItem[i]]);
}
return sArray ;
}
// 切 记 alipaypublickey 是 支 付 宝 的 公 钥 , 请 去 open .alipay .com 对 应 应 用 下 查 看 。
// bool RSACheckV1 ( IDictionary < string , string > parameters , string alipaypublicKey , string charset , string signType , bool keyFromFile )
bool flag = AlipaySignature.RSACheckV1(GetRequestPost(),alipaypublicKey,"UTF-8","RSA2",false);
C#异步验签示例(证书)
// 获 取 支 付 宝 POST 过 来 通 知 消 息 , 并 以 “参 数 名 = 参 数 值 ” 的 形 式 组 成 数 组
// request 回 来 的 信 息 组 成 的 数 组
public Dictionary<string,string> GetRequestPost()
{
int i = 0 ;
IDictionary<string,string> sArray = new IDictionary<string,string>();
NameValueCollection coll;
// Load Form variables into NameValueCollection variable .
coll = Request.Form ;
//Get names of all forms into a string array .
String[] requestItem = coll.AllKeys;
for (i = 0;i < requestItem.Length ; i++)
{
sArray.Add( requestItem[i], Request.Form[requestItem[i]]);
}
return sArray ;
}
// 切 记 alipayPublicCertPath 是 支付宝公钥证书路径 , 请 去 open .alipay .com 对 应 应 用 下 查 看 。
// bool RSACheckV1 ( IDictionary < string , string > parameters , string alipayPublicCertPath , string charset , string signType)
bool flag = AlipaySignature.RSACertCheckV1(dics, alipayPublicCertPath, "UTF-8", "RSA2");