cnangel手记分类的最新日记


使用Discuz7.2之后,发现财付通支付并不好使,并提示:


支付失败,您的资金未被扣除,原因可能是:您所下单网站链接有更新或者存在风险,请您稍后尝试或者与该网站客服联系。

于是去财付通的接口技术文档上看了一下,说为了安全,防止欺诈,财付通的接口新增加了一个参数spbill_create_ip,不能为空,于是
修改了api/trade/tenpay.api.php文件,注意,Discuz7.2的api/trade/tenpay.api.php文件是使用Zend加密的,可以使用黑刀(DeZend)解密一下,
找到
$reqHandler->setparameter( "ver", "3" );

后面加上一句:
$reqHandler->setparameter( "spbill_create_ip", $_SERVER['REMOTE_ADDR'] );

及时加上了,当时在linux系统上,由于是firefox,测试的时候,发现很正常,但在ie下死活不正常,看接口文档,估计是REFER信息不对导致,于是修改
$reqHandler->setgateurl( "https://www.tenpay.com/cgi-bin/v1.0/pay_gate.cgi" );


$reqHandler->setgateurl( "http://www.xxx.com/tmp.php" );

tmp.php是笔者写的一个测试程序,主要显示环境变量,其内容如下:

<?php
phpinfo();
?>

发现在firefox浏览器下有HTTP_REFERER这个变量,但是ie浏览器下没有HTTP_REFERER这个变量,找到原因了,那么看一下程序,为什么会出现这个现象呢?找到memcp.php文件,找到如下地方:

502 $requesturl = credit_payurl($price, $orderid);
503
504 $query = $db->query("SELECT orderid FROM {$tablepre}orders WHERE orderid='$orderid'");
505 if($db->num_rows($query)) {
506 showmessage('credits_addfunds_order_invalid');
507 }
508
509 $db->query("INSERT INTO {$tablepre}orders (orderid, status, uid, amount, price, submitdate)
510 VALUES ('$orderid', '1', '$discuz_uid', '$amount', '$price', '$timestamp')");
511
512 showmessage('credits_addfunds_succeed', $requesturl);

在跳转时,程序使用了showmessage函数,而查看include/global.func.php文件里面showmessage函数定义,找到:

1099 if($url_forward) {
1100 $show_message = "<script type=\"text/javascript\" reload=\"1\">\nif($('return_$handlekey')) $('return_$handlekey').className = 'onright';\nif(typeof submithandle_$handlekey =='function') {submithandle_$handlekey('$url_forward', '$show_message');} else {location.href='$url_forward'}\n</script>";
1101 } else {
1102 $show_message .= "<script type=\"text/javascript\" reload=\"1\">\nif(typeof messagehandle_$handlekey =='function') {messagehandle_$handlekey('$messagehandle', '$show_message');}\n</script>";
1103 }

发现跳转使用的是location.href,而一般写前端界面的人都知道location.href在ie下是取不到refer信息的,那么现在问题就变成用什么方法代替location.href的跳转呢?问题也很简单,拷贝一份showmessage函数的内容,命名函数showmessage为函数trade_showmessage,然后找到上述的地方,修改成:

1105 if($url_forward) {
1106 $show_message = "<script type=\"text/javascript\" reload=\"1\">\nif($('return_$handlekey')) $('return_$handlekey').className = 'onright';\nif(typeof submithandle_$handlekey =='function') {submithandle_$handlekey('$url_forward', '$show_message');} else { if (document.all){ var gotoLink = document.createElement('a');gotoLink.href='$url_forward';document.body.appendChild(gotoLink);gotoLink.click();}\nelse window.location.href='$url_forward';}\n</script>";
1107 } else {
1108 $show_message .= "<script type=\"text/javascript\" reload=\"1\">\nif(typeof messagehandle_$handlekey =='function') {messagehandle_$handlekey('$messagehandle', '$show_message');}\n</script>";
1109 }

即创建一个DOM节点,并添加click事件,从而memcp.php文件调用trade_showmessage函数解决问题。

当我们使用firefox打开一个带有https或者证书验证的网页时,发现出现如下错误:
Renegotiation is not allowed on this SSL socket.
(Error code: ssl_error_renegotiation_not_allowed)
为了打开SSL renegotiation这个选项,需要你在firefox浏览器下输入:
about:config
并搜索“security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref”字样,将其值修改为true即可。
当然最好你需要了解这个选项的打开对于你的浏览器安全来说,是有问题的。

更多详情见:
http://dotomaz.tumblr.com/post/786443743/firefox-4-0b1-and-ssl-renegotiation

竟然有小偷光顾了

| 暂无评论
    周日凌晨,下很大的雨,竟然有小偷来我租住的地方偷东西来了,幸好人没有事,只把相机和钱包里面的100多元的钱偷走了,顺便拿了一把伞遮雨。
    在年前,很多同事家就有别人偷过,但是没有想到我也亲身经历了 :) 杭州的治安明显比不上北京啊。

回忆

| 暂无评论
   在公司加了一会儿班,看了看原来以前逛的一些网站:
   感觉越来越远了。

迟来的雨季

| 暂无评论
    江南的梅雨季节在6月份爆发了,一扫几日前闷热的天气。
    周末也没有怎么出去,想开始写论文,但是没有心情,估计快毕不了业了。:)
    妈妈也来到杭州了,每次食堂的饭菜的确不好吃,不知道古代人民怎么弄出八大菜系的。

关于此归档

这里是cnangel手记分类日记的归档。

上一个分类C/C++

下一个分类电脑技巧

主索引归档页可以看到最新的日记和所有日记。

October 2011

Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
Powered by Movable Type 5.12