找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 97|回复: 10

WHMCS的掉单和补单问题

[复制链接]

24

主题

133

回帖

356

积分

中级会员

积分
356
发表于 2011-12-20 11:13:20 | 显示全部楼层 |阅读模式
看了论坛的很多关于whmcs的支付宝接口的帖子,貌似大家的都工作正常啊!我之前用的bendy的,现在用的xd04053045修改版的,
两者在支付成功后如果等待跳回返回界面的话,都是正常的
但实际情况是大多数用户支付完没等着跳转就把网页给关了,这样后台就会显示该账单一直是未支付的。Google了下,貌似有的人说可以手动补单,请问怎么补?难不成去数据库改订单状态啊。。。这个帖子http://www.hostloc.com/thread-74558-1-1.html里面说的notify_url.php和“curl https://www.你的域名.com/”是什么意思也不太懂,知道论坛大神多,特此求救!感激不尽!
回复

使用道具 举报

153

主题

644

回帖

1771

积分

金牌会员

积分
1771
发表于 2011-12-20 11:19:23 | 显示全部楼层
至今没用过的路过,,,哈哈
回复

使用道具 举报

131

主题

1211

回帖

2847

积分

金牌会员

积分
2847
发表于 2011-12-20 11:21:32 | 显示全部楼层
alipay_config.php文件中的$notify_url变量不会填的是https吧?
回复

使用道具 举报

283

主题

6395

回帖

1万

积分

论坛元老

积分
13697
发表于 2011-12-20 11:23:57 | 显示全部楼层
我目前的return_url为:http://www.我的网站/client/modules/gateways/callback/alipay_return.php
notify_url为:http://www.我的网站/client/modules/gateways/callback/alipay_callback.php
访问return_url显示正常,访问notify_url为页面空白。另外我还有个alipay_return.htm文件,不知道以上配置哪里有误?导致太快关闭支付完成的页面会导致掉单?
回复

使用道具 举报

24

主题

133

回帖

356

积分

中级会员

积分
356
 楼主| 发表于 2011-12-20 11:44:41 | 显示全部楼层
也没什么好说的了

没用过
回复

使用道具 举报

97

主题

1725

回帖

3767

积分

论坛元老

积分
3767
发表于 2011-12-20 11:47:49 | 显示全部楼层
我没用过,楼下说说
回复

使用道具 举报

203

主题

4591

回帖

9823

积分

论坛元老

积分
9823
发表于 2011-12-20 11:47:56 | 显示全部楼层
原帖由 theiter 于 2011-12-20 11:21 发表


至今没用过的路过,,,哈哈
回复

使用道具 举报

126

主题

296

回帖

1010

积分

金牌会员

积分
1010
发表于 2011-12-20 11:48:00 | 显示全部楼层
官方提供的接口文件的补单文件是notify_url.php

你的是alipay_callback.php,可能改名了吧

打开看看内容是什么
回复

使用道具 举报

283

主题

6395

回帖

1万

积分

论坛元老

积分
13697
发表于 2011-12-20 11:48:08 | 显示全部楼层
合体才是王道啊 = =补单直接手动设置付款就可以了啊
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2011-12-20 12:00:34 | 显示全部楼层
partner        = $partner;
                $this->security_code  = $security_code;
                $this->sign_type      = $sign_type;
                $this->mysign         = "";
                $this->_input_charset = $_input_charset ;
                $this->transport      = $transport;
                if($this->transport == "https") {
                        $this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
                }else $this->gateway = "http://notify.alipay.com/trade/notify_query.do?";
        }
/****************************************对notify_url的认证*********************************/
        function notify_verify() {   
                if($this->transport == "https") {
                        $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "&notify_id=".$_POST["notify_id"];
                } else {
                        $veryfy_url = $this->gateway. "partner=".$this->partner."&notify_id=".$_POST["notify_id"];
                }
                $veryfy_result = $this->get_verify($veryfy_url);
                $post          = $this->para_filter($_POST);
                $sort_post     = $this->arg_sort($post);
                while (list ($key, $val) = each ($sort_post)) {
                        $arg.=$key."=".$val."&";
                }
                $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个&号
                $this->mysign = $this->sign($prestr.$this->security_code);
                //log_result("notify_url_log:sign=".$_POST["sign"]."&mysign=".$this->mysign."&".$this->charset_decode(implode(",",$_POST),$this->_input_charset ));
                if (eregi("true$",$veryfy_result) && $this->mysign == $_POST["sign"])  {
                        return true;
                } else return false;
        }
/*******************************************************************************************/

/**********************************对return_url的认证***************************************/        
        function return_verify() {  
                $sort_get= $this->arg_sort($_GET);
                while (list ($key, $val) = each ($sort_get)) {
                        if($key != "sign" && $key != "sign_type")
                        $arg.=$key."=".$val."&";
                }
                $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个&号
                $this->mysign = $this->sign($prestr.$this->security_code);
                /*while (list ($key, $val) = each ($_GET)) {
                $arg_get.=$key."=".$val."&";
                }*/
                //log_result("return_url_log=".$_GET["sign"]."&".$this->mysign."&".$this->charset_decode(implode(",",$_GET),$this->_input_charset ));
                if ($this->mysign == $_GET["sign"])  return true;
                else return false;
        }
/*******************************************************************************************/

        function get_verify($url,$time_out = "60") {
                $urlarr     = parse_url($url);
                $errno      = "";
                $errstr     = "";
                $transports = "";
                if($urlarr["scheme"] == "https") {
                        $transports = "ssl://";
                        $urlarr["port"] = "443";
                } else {
                        $transports = "tcp://";
                        $urlarr["port"] = "80";
                }
                $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
                if(!$fp) {
                        die("ERROR: $errno - $errstr
\n");
                } else {
                        fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
                        fputs($fp, "Host: ".$urlarr["host"]."\r\n");
                        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
                        fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
                        fputs($fp, "Connection: close\r\n\r\n");
                        fputs($fp, $urlarr["query"] . "\r\n\r\n");
                        while(!feof($fp)) {
                                $info[]=@fgets($fp, 1024);
                        }
                        fclose($fp);
                        $info = implode(",",$info);
                        while (list ($key, $val) = each ($_POST)) {
                                $arg.=$key."=".$val."&";
                        }
                        //log_result("notify_url_log=".$url.$this->charset_decode($info,$this->_input_charset));
                        //log_result("notify_url_log=".$this->charset_decode($arg,$this->_input_charset));
                        return $info;
                }
        }

        function arg_sort($array) {
                ksort($array);
                reset($array);
                return $array;
        }

        function sign($prestr) {
                $sign='';
                if($this->sign_type == 'MD5') {
                        $sign = md5($prestr);
                }elseif($this->sign_type =='DSA') {
                        //DSA 签名方法待后续开发
                        die("DSA 签名方法待后续开发,请先使用MD5签名方式");
                }else {
                        die("支付宝暂不支持".$this->sign_type."类型的签名方式");
                }
                return $sign;
        }
/***********************除去数组中的空值和签名模式*****************************/
        function para_filter($parameter) {
                $para = array();
                while (list ($key, $val) = each ($parameter)) {
                        if($key == "sign" || $key == "sign_type" || $val == "")continue;
                        else        $para[$key] = $parameter[$key];
                }
                return $para;
        }
/********************************************************************************/

/******************************实现多种字符编码方式*****************************/
        function charset_encode($input,$_output_charset ,$_input_charset ="utf-8" ) {
                $output = "";
                if(!isset($_output_charset) )$_output_charset  = $this->parameter['_input_charset'];
                if($_input_charset == $_output_charset || $input ==null ) {
                        $output = $input;
                } elseif (function_exists("mb_convert_encoding")){
                        $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
                } elseif(function_exists("iconv")) {
                        $output = iconv($_input_charset,$_output_charset,$input);
                } else die("sorry, you have no libs support for charset change.");
                return $output;
        }
/********************************************************************************/

/******************************实现多种字符解码方式******************************/
        function charset_decode($input,$_input_charset ,$_output_charset="utf-8"  ) {
                $output = "";
                if(!isset($_input_charset) )$_input_charset  = $this->_input_charset ;
                if($_input_charset == $_output_charset || $input ==null ) {
                        $output = $input;
                } elseif (function_exists("mb_convert_encoding")){
                        $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
                } elseif(function_exists("iconv")) {
                        $output = iconv($_input_charset,$_output_charset,$input);
                } else die("sorry, you have no libs support for charset changes.");
                return $output;
        }
/*********************************************************************************/
}

$gatewaymodule = "alipay"; # Enter your gateway module name here replacing template
$GATEWAY = getGatewayVariables($gatewaymodule);
if (!$GATEWAY["type"]) die("Module Not Activated"); # Checks gateway module is active before accepting callback

$_input_charset  = "utf-8";   //字符编码格式 目前支持 GBK 或 utf-8
$sign_type       = "MD5";     //加密方式 系统默认(不要修改)
$transport       = "https";   //访问模式,你可以根据自己的服务器是否支持ssl访问而选择http以及https访问模式(系统默认,不要修改)
$gatewayPID = $GATEWAY['partnerID'];
$gatewaySELLER_EMAIL = $GATEWAY['seller_email'];
$gatewaySECURITY_CODE = $GATEWAY['security_code'];
$alipay = new alipay_notify($gatewayPID,$gatewaySECURITY_CODE,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->notify_verify();
if(!$verify_result) {
        logTransaction($GATEWAY["name"],$_POST,"Unsuccessful");
        exit;
}
# Get Returned Variables
$status = $_POST['trade_status'];    //获取支付宝传递过来的交易状态
$invoiceid = $_POST['out_trade_no']; //获取支付宝传递过来的订单号
$transid = $_POST['trade_no'];       //获取支付宝传递过来的交易号
$amount = $_POST['total_fee'];       //获取支付宝传递过来的总价格
$fee = 0;
if($status == 'TRADE_FINISHED' || $status == 'TRADE_SUCCESS') {
        $invoiceid = checkCbInvoiceID($invoiceid,$GATEWAY["name"]); # Checks invoice ID is a valid invoice number or ends processing
        checkCbTransID($transid); # Checks transaction number isn't already in the database and ends processing if it does
        addInvoicePayment($invoiceid,$transid,$amount,$fee,$gatewaymodule);
        logTransaction($GATEWAY["name"],$_POST,"Successful");
}

?>

这个就是bendy版本的吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2025-1-11 18:49 , Processed in 0.020927 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表