Graent.Hu 的博客

新浪微薄腾讯微薄

最新碎语:最近感觉有些迷茫,怎么办~

您的位置:Graent.Hu 的博客 >PHP编程> linux下支付宝即时到帐验签失败ILLEGAL_SIGN的解决办法

linux下支付宝即时到帐验签失败ILLEGAL_SIGN的解决办法

1440827413.png

如上图

最近正在给公司官网(一闪网络)改版,本地开发的时候是在wamp的环境下进行的,测试的时候是完全可以没有问题的,但是投入正式使用的时候,网站的服务器是使用的lamp的环境,换到linux环境下之后,提交支付就出现了上图的现象,后台通过多种方法排查最后发现,当form使用get提交的时候windows环境下提交的url里面的汉字能够保持原有传送,支付宝端验签的时候是正确的,但是到了linux之后form使用get提交的时候,url里面的汉字就被转码了,这样以来在本地生成的签名,到支付宝端使用转码后的生成的签名自然的就不一样,搜索了很多解决办法但是都没有生效,参考其中一种方法说可能是配置文件等的编码不正确,但是开发的程序全都是utf-8的编码,按理说是没有问题的,但是抱着试试看的态度,在提交处理的控制器Controller里面加了一句:

header("Content-type: text/html; charset=utf-8");
  再试一下,果然验签成功了,又想了一下在支付宝支付的类库里面生成form的地方改成生成完整的html页面代码,而不是简单的一个form提交,这样以来在生成的时候指定utf-8的编码,果然此方法也是有效的,如下代码:

$sHtml = "<!doctype html><html><head><meta charset='utf-8'><title>跳转中 ... - 一闪网络</title><style>body{ margin:0; padding:0;}</style></head><body>";
        
	$sHtml .= "<form id='alipaysubmit' name='alipaysubmit' action='".$this->gateway."' method='".$method."'>";
	while (list ($key, $val) = each ($para)) {
            $sHtml .= "<input type='hidden' name='".$key."' value='".$val."'/>";
        }

	//submit按钮控件请不要含有name属性
        $sHtml .= "<input type='submit'  value='".$button_name."' style='display:none;'></form>";
        $sHtml .= "<div style=' width:100%; height:100%; margin:300px auto; text-align:center; font-size:12px;'><img src='/Public/images/loader.gif'><br>正在跳转至支付...</div>";
	$sHtml .= "</body><script>document.forms['alipaysubmit'].submit();</script></html>";
	return $sHtml;
  OK这样就解决了,有没有帮到你?别吝啬给点评价呗

我的微信:graent_hu

欢迎扫码加我和微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文标题:linux下支付宝即时到帐验签失败ILLEGAL_SIGN的解决办法

本文链接:https://www.wlyc.cn/post-40.html

发表评论

路人甲 表情
看不清楚?点图切换