Cnangel: October 2011的归档

[ZT]服务价值

| 暂无评论
    服务可以让顾客愉快,服务可以让顾客花钱不后悔,服务可以让顾客获得幸福感。 
     服务可以留住老顾客,服务可以产生好的口碑传播效应,服务可以吸引新顾客。 
     服务可以让员工精神升华,服务可以提升员工满意度,降低员工流失率。


使用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函数解决问题。

关于此归档

这里是CnangelOctober 2011发表的所有日记。

上一篇日记Cnangel: September 2011

下一篇日记Cnangel: November 2011

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

August 2012

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.14-en