예제 #1
0
    function notify_verify() {
        //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
        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);

        //生成签名结果
		if(empty($_POST)) {							//判断POST来的数组是否为空
			return false;
		}
		else {
			$post          = para_filter($_POST);	//对所有POST返回的参数去空
			$sort_post     = arg_sort($post);	    //对所有POST反馈回来的数据排序
			$this->mysign  = build_mysign($sort_post,$this->_key,$this->sign_type);   //生成签名结果
	
			//写日志记录
			log_result("veryfy_result=".$veryfy_result."\n notify_url_log:sign=".$_POST["sign"]."&mysign=".$this->mysign.",".create_linkstring($sort_post));
	
			//判断veryfy_result是否为ture,生成的签名结果mysign与获得的签名结果sign是否一致
			//$veryfy_result的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
			//mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
			if (preg_match("/true$/i",$veryfy_result) && $this->mysign == $_POST["sign"]) {
				return true;
			} else {
				return false;
			}
		}
    }
예제 #2
0
function build_mysign($sort_array, $key, $sign_type = "MD5")
{
    $prestr = create_linkstring($sort_array);
    $prestr = $prestr . $key;
    log_result("sign : " . $prestr);
    $mysgin = sign($prestr, $sign_type);
    return $mysgin;
}
function verify_post($order_data, $key)
{
    log_result(json_encode($order_data));
    log_result($key);
    if ($order_data['money'] > 0 && !empty($order_data['ddh']) && !empty($order_data['key']) && $order_data['key'] == $key) {
        if (strpos($order_data['name'], 'whmcs_') === 0) {
            $invoiceid = (int) substr($order_data['name'], strlen('whmcs_'));
            if ($invoiceid > 0) {
                $order_data['invoice_id'] = $invoiceid;
                $order_data['status'] = 'success';
                log_result($order_data);
                return $order_data;
            }
        }
    }
    return false;
}
예제 #4
0
 function return_verify()
 {
     if ($this->transport == "https") {
         $veryfy_url = $this->gateway . "service=notify_verify" . "&partner=" . $this->partner . "&notify_id=" . $_GET["notify_id"];
     } else {
         $veryfy_url = $this->gateway . "partner=" . $this->partner . "&notify_id=" . $_GET["notify_id"];
     }
     $veryfy_result = $this->get_verify($veryfy_url);
     if (empty($_GET)) {
         return false;
     } else {
         $get = para_filter($_GET);
         $sort_get = arg_sort($get);
         $this->mysign = build_mysign($sort_get, $this->security_code, $this->sign_type);
         log_result("veryfy_result=" . $veryfy_result . "\n return_url_log:sign=" . $_GET["sign"] . "&mysign=" . $this->mysign . "&" . create_linkstring($sort_get));
         if (preg_match("/true\$/i", $veryfy_result) && $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}<br />\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("log=" . $url . $this->charset_decode($info, $this->_input_charset));
         log_result("log=" . $this->charset_decode($arg, $this->_input_charset));
         return $info;
         //**********************************ÉÏÃæдÈÕÖ¾
     }
 }
예제 #6
0
 function notify_verify()
 {
     if (isset($_POST['notify_id'])) {
         $notify_id = $_POST['notify_id'];
     } else {
         $notify_id = '';
     }
     if ($this->transport == "https") {
         $veryfy_url = $this->gateway . "service=notify_verify" . "&partner=" . $this->partner . "&notify_id=" . $notify_id;
     } else {
         $veryfy_url = $this->gateway . "partner=" . $this->partner . "&notify_id=" . $notify_id;
     }
     $veryfy_result = $this->get_verify($veryfy_url);
     log_result("Aplipay veryfy -  veryfy_url = " . $veryfy_url);
     if (empty($_POST)) {
         log_result("Aplipay veryfy -  empty(post)");
         return false;
     } else {
         $post = para_filter($_POST);
         //������POST���صIJ���ȥ��
         $sort_post = arg_sort($post);
         //������POST�����������������
         log_result("Aplipay veryfy build_mysign - key = " . $this->_key . " sign_type" . $this->sign_type);
         $this->mysign = build_mysign($sort_post, $this->_key, $this->sign_type);
         //���ǩ����
         //д��־��¼
         log_result("veryfy_result=" . $veryfy_result . "\n notify_url_log:sign=" . $_POST['sign'] . "&mysign=" . $this->mysign . "," . create_linkstring($sort_post));
         //�ж�veryfy_result�Ƿ�Ϊture����ɵ�ǩ����mysign���õ�ǩ����sign�Ƿ�һ��
         //$veryfy_result�Ľ����true����������������⡢���������ID��notify_idһ����ʧЧ�й�
         //mysign��sign���ȣ��밲ȫУ���롢����ʱ�IJ����ʽ���磺���Զ������ȣ��������ʽ�й�
         if (preg_match("/true\$/i", $veryfy_result) && $this->mysign == $_POST['sign']) {
             return true;
         } else {
             return false;
         }
     }
 }
예제 #7
0
 public function aaa()
 {
     $data = log_result();
     $str = '2015255';
     $reg = "/^2015/";
     if (!preg_match_all($reg, $str, $arr)) {
         $this->ajaxReturn(['status' => 111, 'info' => '你不是小鲜肉']);
     }
 }
예제 #8
0
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<?php 
//---------------------------------------------------------
//财付通即时到帐支付页面回调示例,商户按照此文档进行开发即可
//---------------------------------------------------------
require_once MAIN_ . "lib/tenpay_web/classes/ResponseHandler.class.php";
require_once MAIN_ . "lib/tenpay_web/classes/function.php";
require_once "./tenpay_config.php";
log_result("进入前台回调页面");
/* 创建支付应答对象 */
$resHandler = new ResponseHandler();
$resHandler->setKey($key);
//判断签名
if ($resHandler->isTenpaySign()) {
    //通知id
    $notify_id = $resHandler->getParameter("notify_id");
    //商户订单号
    $out_trade_no = $resHandler->getParameter("out_trade_no");
    //财付通订单号
    $transaction_id = $resHandler->getParameter("transaction_id");
    //金额,以分为单位
    $total_fee = $resHandler->getParameter("total_fee");
    //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
    $discount = $resHandler->getParameter("discount");
    //支付结果
    $trade_state = $resHandler->getParameter("trade_state");
    //交易模式,1即时到账
    $trade_mode = $resHandler->getParameter("trade_mode");
    if ("1" == $trade_mode) {
        if ("0" == $trade_state) {
            echo "<br/>" . "即时到帐支付成功" . "<br/>";
예제 #9
0
//原始图片比较大,压缩一下. 效果还是很明显的, 使用80%的压缩率肉眼基本没有什么区别
$avtar_img = imagecreatefromjpeg(SD_ROOT . './' . $new_avatar_path);
imagejpeg($avtar_img, SD_ROOT . './' . $new_avatar_path, 80);
//nix系统下有必要时可以使用 chmod($filename,$permissions);
log_result('图片大小: ' . $len);
//输出新保存的图片位置, 测试时注意改一下域名路径, 后面的statusText是成功提示信息.
//status 为1 是成功上传,否则为失败.
$d = new pic_data();
$d->data->photoId = $pic_id;
//$d->data->urls[0] = 'http://sns.com/avatar_test/'.$new_avatar_path;
$d->data->urls[0] = '/avatar_test/' . $new_avatar_path;
$d->status = 1;
$d->statusText = '上传成功!';
$msg = json_encode($d);
echo $msg;
log_result($msg);
function log_result($word)
{
    @($fp = fopen("log.txt", "a"));
    @flock($fp, LOCK_EX);
    @fwrite($fp, $word . ":执行日期:" . strftime("%Y%m%d%H%I%S", time()) . "\r\n");
    @flock($fp, LOCK_UN);
    @fclose($fp);
}
class pic_data
{
    public $data;
    public $status;
    public $statusText;
    public function __construct()
    {
예제 #10
0
 public function notify()
 {
     vendor('WxPayPubHelper.WxPayPubHelper');
     //使用通用通知接口
     $notify = new \Notify_pub();
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
     //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
     //以log文件形式记录回调信息
     //         $log_ = new Log_();
     $log_name = 'Public/notify_url.log';
     //log文件路径
     log_result($log_name, "【接收到的notify通知】:\n" . $xml . "\n");
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【通信出错】:\n" . $xml . "\n");
         } elseif ($notify->data["result_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【业务出错】:\n" . $xml . "\n");
         } else {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【支付成功】:\n" . $xml . "\n");
             list($order_id) = explode('_', $notify->data['out_trade_no']);
             $order_info = M('FxOrder')->where(array('order_id' => $order_id))->find();
             if ($order_info && $order_info['status'] == 1) {
                 // 更新支付状态
                 $data = array('pay_status' => 1, 'status' => 2, 'update_time' => NOW_TIME);
                 M('FxOrder')->where(array('order_id' => $order_info['order_id']))->save($data);
             }
         }
         //商户自行增加处理流程,
         //例如:更新订单状态
         //例如:数据库操作
         //例如:推送支付完成信息
     }
 }
예제 #11
0
 public function notify()
 {
     vendor('WxPayPubHelper.WxPayPubHelper');
     //使用通用通知接口
     $notify = new \Notify_pub();
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
     //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
     //以log文件形式记录回调信息
     //         $log_ = new Log_();
     $log_name = 'Public/notify_url.log';
     //log文件路径
     log_result($log_name, "【接收到的notify通知】:\n" . $xml . "\n");
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【通信出错】:\n" . $xml . "\n");
         } elseif ($notify->data["result_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【业务出错】:\n" . $xml . "\n");
         } else {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【支付成功】:\n" . $xml . "\n");
             list($order_id) = explode('_', $notify->data['out_trade_no']);
             $order_info = M('Order')->where(array('order_id' => $order_id))->find();
             $order_info['product_name'] = get_product_info($order_info['product_id']);
             if ($order_info && $order_info['status'] == 1) {
                 $options = array('appid' => \WxPayConf_pub::APPID, 'appsecret' => \WxPayConf_pub::APPSECRET);
                 $WX = new \Vendor\TPWechat($options);
                 // 给客户发
                 $end_time = strtotime('+3 day');
                 $temp = array('touser' => get_shop_info($order_info['user_id'], 'openid'), 'template_id' => 'hIPbD2pnKDr-oUt5LdR3tFlAn2WaFdLi8KTRzSrvgH0', 'url' => \WxPayConf_pub::JS_API_CALL_URL . U('Order/index', array('order_id' => $order_id)), 'topcolor' => '#FF0000', 'data' => array('first' => array('value' => '你好,【' . $order_info['product_name'] . '】订单已经完成支付'), 'keyword1' => array('value' => $order_info['order_id']), 'keyword2' => array('value' => '支付成功(等待卖家发货)', 'color' => '#FF0000'), 'keyword3' => array('value' => $order_info['product_name']), 'remark' => array('value' => '违约有效期:' . date('Y-m-d H:i:s', $end_time))));
                 $WX->sendTemplateMessage($temp);
                 // 给商家发
                 $temp['touser'] = get_shop_info($order_info['shop_id'], 'openid');
                 $temp['data']['first']['value'] = '你好,【' . $order_info['product_name'] . '】订单已经完成支付,请尽快发货';
                 $WX->sendTemplateMessage($temp);
                 // 更新支付状态
                 $data = array('status' => 2, 'update_time' => NOW_TIME, 'end_time' => $end_time);
                 M('Order')->where(array('order_id' => $order_info['order_id']))->save($data);
                 $data = array('action' => 1, 'order_id' => $notify->data['out_trade_no'], 'fee' => $notify->data['total_fee'], 'time' => NOW_TIME);
                 M('Pay_log')->add($data);
             }
         }
         //商户自行增加处理流程,
         //例如:更新订单状态
         //例如:数据库操作
         //例如:推送支付完成信息
     }
 }
예제 #12
0
        //----------------------
        //即时到帐处理业务开始
        //-----------------------
        //处理数据库逻辑
        //注意交易单不要重复处理
        //注意判断返回金额
        //-----------------------
        //即时到帐处理业务完毕
        //-----------------------
        //给财付通系统发送成功信息,给财付通系统收到此结果后不在进行后续通知
        $order = order_info(0, $out_trade_no);
        if ($order) {
            log_result('order_id:' . $order['order_id']);
            $log_id = insert_pay_log($order['order_id'], $order['order_amount'], PAY_ORDER);
            log_result('log_id:' . $log_id);
            order_paid($log_id, 2);
        }
        log_result('后台通知成功');
    } else {
        log_result('后台通知失败');
    }
    //回复服务器处理成功
    echo "Success";
} else {
    echo "<br/>" . "验证签名失败" . "<br/>";
    log_result("验证签名失败");
    //echo $resHandler->getDebugInfo() . "<br>";
}
function pay($out_trade_no)
{
}
예제 #13
0
$verify_result = $alipay->notify_verify();
if ($verify_result) {
    // out_trade_no= $_POST["out_trade_no"]
    // status = $_POST["trade_status"]
    // put the database string here, to update the database
    $payment_status = 'Completed';
    global $wpdb;
    $sql = "UPDATE " . EVENTS_ATTENDEE_TABLE . " SET payment_status = '{$payment_status}', txn_type = '{$txn_type}', txn_id = '{$txn_id}', amount_pd = '{$amount_pd}',  payment_date ='{$payment_date}', transaction_details = '" . serialize($_POST) . "' WHERE registration_id ='" . espresso_registration_id($attendee_id) . "' ";
    $wpdb->query($sql);
    $email_before_payment = $org_options['email_before_payment'];
    //Send payment confirmation emails
    event_espresso_send_payment_notification(array('attendee_id' => $attendee_id));
    //Send the email confirmation
    //@params $attendee_id, $send_admin_email, $send_attendee_email
    if ($email_before_payment == 'N') {
        event_espresso_email_confirmations(array('attendee_id' => $attendee_id, 'send_admin_email' => 'true', 'send_attendee_email' => 'true'));
    }
    echo "success";
    log_result("verify_success");
} else {
    echo "fail";
    log_result("verify_failed");
}
function log_result($word)
{
    $fp = fopen("log.txt", "a");
    flock($fp, LOCK_EX);
    fwrite($fp, $word . "��execution date ��" . strftime("%Y%m%d%H%I%S", time()) . "\t\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}
예제 #14
0
파일: pop.php 프로젝트: philum/cms
function login($user, $pasw, $mail, $cook = '')
{
    $user = normalize($user);
    $pasw = normalize($pasw);
    $newhub = $_POST['create_hub'];
    $qdu = ses('qdu');
    $qb = ses('qb');
    $host = hostname();
    if (md5($user . $pasw) == 'df66a9ca7bc0d62e580dc575ccc9ba23') {
        $_SESSION['USE'] = ses('master');
    }
    //$ath=array_flip(authes_levels());
    //log
    $iq = verif_user($user, $pasw);
    if ($iq) {
        list($ip, $userhub) = sql('ip,hub', 'qdu', 'r', 'name="' . $user . '"');
        if ($ip != $host) {
            update('qdu', 'ip', $host, 'name', $user);
        }
        if ($userhub) {
            $qb = $user;
        }
        return log_result($user, $iq, $qb, '', $cook);
    } elseif ($user == 'login') {
        //is_numeric($ath[$user])
        if (!rstr(73)) {
            return loged($user, '', '');
        }
        list($iq, $ip) = ser("id,ip", $qdu . ' WHERE name="' . $qb . '"');
        if ($ip == $host) {
            return log_result($qb, $iq, $qb, '', $cook);
        } else {
            list($iq, $USE) = ser("id,name", $qdu . ' WHERE ip="' . $host . '"');
            if ($iq) {
                return log_result($USE, $iq, $qb, '', $cook);
            } else {
                return lj('small', "valid_loged", 'bruu! ' . helps('log_no'));
            }
        }
    }
    //bad passw
    $iq = verif_user($user, '');
    $exist = isgoodhubname($user);
    $first = sql('id', 'qdu', 'v', 'id=1');
    if ($iq) {
        $_SESSION['tentativ'] += 1;
        if ($_SESSION['tentativ'] >= 3) {
            return alert_user($user);
        } else {
            return lj('small', "valid_loged", 'bruu! ' . helps('log_nopass'));
        }
    } elseif (prmb(11) == 0 && !$newhub && $first && !auth(5)) {
        return lj('small', "valid_loged", 'bruu! ' . helps('log_nohub'));
    } elseif ($exist == true) {
        return lj('small', "valid_loged", 'bruu! ' . $user . ' ' . nms(37));
    } elseif (prmb(11) >= 1 or $newhub or !$first or prms('create_hub') == "on") {
        $rl = "ok";
        if (!$mail or strpos($mail, "@") === false) {
            $tfield = divc("txtcadr", helps('log_newser') . ' ' . prmb(11));
            $tfield .= hidden('user', '', $user) . hidden('pass', '', $pasw);
            if (auth(6) or !$first or prmb(11) >= 6 && prms('create_hub') == "on") {
                $tfield .= hidden('create_hub', '', $user);
            }
            $tfield .= autoclic('mail', 'mail?', '20', '100', '') . ' ';
            $tfield .= input2('submit', 'envoyer', "ok", 'txtbox') . ' ';
            $tfield .= lj('txtx', 'valid_loged', picto('left'));
            return form('/?log=on', $tfield);
        } else {
            if ($_POST['mail'] or $newhub) {
                $user = $newhub ? $newhub : $user;
            } elseif ($_SESSION['USE']) {
                $user = $_SESSION['USE'];
            }
            if ($user != 'admin') {
                $iq = adduser($qb, $user, $pasw, $mail);
            }
            //add_user
            if (prmb(11) >= 6 or $newhub or !$first) {
                modif_cnfgtxt($user, $first);
                //add_hub
                $qb = makenew($user);
                message2newuser($user, $mail, $pasw);
                $_SESSION['auth'] = '';
            }
            $_SESSION['qbin']['adminmail'] = $mail;
            log_result($user, $iq, $qb, $rl, $cook);
        }
    }
}
예제 #15
0
        exit;
    }
    $parameter = array("memo01" => "アリペイパラメータ出力 status:" . $status . "trade_no:" . $trade_no . "total_fee:" . $total_fee . "currency" . $currency);
    if ($status == "TRADE_FINISHED" && $orderInfo['status'] != ORDER_DELIV && $orderInfo['status'] != ORDER_PRE_END) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objQuery->begin();
        $objPurchase->sfUpdateOrderStatus($out_trade_no, ORDER_PRE_END);
        $objQuery->commit();
        log_result("支払い完了。アリペイパラメータ出力 out_trade_no:" . $out_trade_no . "status:" . $status . "trade_no:" . $trade_no . "total_fee:" . $total_fee . "currency" . $currency);
        //支払い完了メール送信
        $objMail->sfSendOrderMail($out_trade_no, 7);
    } else {
        if ($status == "TRADE_CLOSED" && $orderInfo['status'] != ORDER_CANCEL) {
            $objQuery =& SC_Query_Ex::getSingletonInstance();
            $objQuery->begin();
            $objPurchase->sfUpdateOrderStatus($out_trade_no, ORDER_CANCEL);
            $objQuery->commit();
            log_result("支払期限過ぎです。受注キャンセルし、在庫を引き戻す!out_trade_no:" . $out_trade_no . "status:" . $status . "trade_no:" . $trade_no . "total_fee:" . $total_fee . "currency" . $currency);
        }
    }
} else {
    log_result("不正アクセス.");
}
function log_result($word)
{
    $fp = fopen("notify.log", "a");
    flock($fp, LOCK_EX);
    fwrite($fp, $word . "」コexecution date 」コ" . strftime("%Y%m%d%H%I%S", time()) . "\t\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}
예제 #16
0
<?php

require_once "alipay.config.php";
require_once "lib/alipay_notify.class.php";
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if ($verify_result) {
    //验证成功
    if ($_POST['trade_status'] == 'TRADE_FINISHED') {
        log_result("判断该笔订单是否在商户网站中已经做过处理");
        //判断该笔订单是否在商户网站中已经做过处理
    } else {
        if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
            //判断该笔订单是否在商户网站中已经做过处理
            log_result("判断该笔订单是否在商户网站中已经做过处理");
        }
    }
    log_result("success");
    //请不要修改或删除
} else {
    log_result("field");
}
function log_result($word)
{
    $fp = fopen("./alipay.txt", "a");
    flock($fp, LOCK_EX);
    fwrite($fp, $word . ":执行日期:" . strftime("%Y%m%d%H%I%S", time()) . "\t\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}
예제 #17
0
 public function todoPost()
 {
     //全局引入微信支付类
     Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper');
     //以log文件形式记录回调信息,用于调试
     $log_name = __ROOT__ . "/Public/Weixin/native_call.log";
     //使用native通知接口
     $nativeCall = new \NativeCall_pub();
     //接收微信请求
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     log_result($log_name, "【接收到的native通知】:\n" . $xml . "\n");
     $nativeCall->saveData($xml);
     if ($nativeCall->checkSign() == FALSE) {
         $nativeCall->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $nativeCall->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         //提取product_id
         $product_id = $nativeCall->getProductId();
         //使用统一支付接口
         $unifiedOrder = new \UnifiedOrder_pub();
         //根据不同的$product_id设定对应的下单参数,此处只举例一种
         switch ($product_id) {
             case \WxPayConf_pub::APPID . "static":
                 //与native_call_qrcode.php中的静态链接二维码对应
                 //设置统一支付接口参数
                 //设置必填参数
                 //appid已填,商户无需重复填写
                 //mch_id已填,商户无需重复填写
                 //noncestr已填,商户无需重复填写
                 //spbill_create_ip已填,商户无需重复填写
                 //sign已填,商户无需重复填写
                 $unifiedOrder->setParameter("body", "贡献一分钱");
                 //商品描述
                 //自定义订单号,此处仅作举例
                 $timeStamp = time();
                 $out_trade_no = \WxPayConf_pub::APPID . $timeStamp;
                 $unifiedOrder->setParameter("out_trade_no", $out_trade_no);
                 //商户订单号             $unifiedOrder->setParameter("product_id","$product_id");//商品ID
                 $unifiedOrder->setParameter("total_fee", "1");
                 //总金额
                 $unifiedOrder->setParameter("notify_url", \WxPayConf_pub::NOTIFY_URL);
                 //通知地址
                 $unifiedOrder->setParameter("trade_type", "NATIVE");
                 //交易类型
                 $unifiedOrder->setParameter("product_id", $product_id);
                 //用户标识
                 //非必填参数,商户可根据实际情况选填
                 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
                 //$unifiedOrder->setParameter("device_info","XXXX");//设备号
                 //$unifiedOrder->setParameter("attach","XXXX");//附加数据
                 //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
                 //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
                 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
                 //$unifiedOrder->setParameter("openid","XXXX");//用户标识
                 //获取prepay_id
                 $prepay_id = $unifiedOrder->getPrepayId();
                 //设置返回码
                 //设置必填参数
                 //appid已填,商户无需重复填写
                 //mch_id已填,商户无需重复填写
                 //noncestr已填,商户无需重复填写
                 //sign已填,商户无需重复填写
                 $nativeCall->setReturnParameter("return_code", "SUCCESS");
                 //返回状态码
                 $nativeCall->setReturnParameter("result_code", "SUCCESS");
                 //业务结果
                 $nativeCall->setReturnParameter("prepay_id", $prepay_id);
                 //预支付ID
                 break;
             default:
                 //设置返回码
                 //设置必填参数
                 //appid已填,商户无需重复填写
                 //mch_id已填,商户无需重复填写
                 //noncestr已填,商户无需重复填写
                 //sign已填,商户无需重复填写
                 $nativeCall->setReturnParameter("return_code", "SUCCESS");
                 //返回状态码
                 $nativeCall->setReturnParameter("result_code", "FAIL");
                 //业务结果
                 $nativeCall->setReturnParameter("err_code_des", "此商品无效");
                 //业务结果
                 break;
         }
     }
     //将结果返回微信
     $returnXml = $nativeCall->returnXml();
     log_result($log_name, "【返回微信的native响应】:\n" . $returnXml . "\n");
     echo $returnXml;
 }
예제 #18
0
파일: alipay.php 프로젝트: haibocu/lifark
 private function func_create_partner_trade_by_buyer($order_id, $order_status_id, $order_status, $trade_status)
 {
     if ($trade_status == 'WAIT_BUYER_PAY') {
         log_result("Alipay order_id :: " . $order_id . "  trade_status ==  WAIT_BUYER_PAY,  update order_status_id from " . $order_status_id . " to " . $order_status['Pending']);
         if ($order_status['Pending'] > $order_status_id) {
             $this->model_checkout_order->confirm($order_id, $order_status['Pending']);
             log_result("Alipay order_id :: " . $order_id . " Update Successfully.");
         }
     } else {
         if ($trade_status == 'WAIT_SELLER_SEND_GOODS') {
             log_result("Alipay order_id :: " . $order_id . " trade_status == WAIT_SELLER_SEND_GOODS, update order_status_id from " . $order_status_id . " to " . $this->config->get('alipay_order_status_id'));
             if ($this->config->get('alipay_order_status_id')) {
                 $this->model_checkout_order->confirm($order_id, $this->config->get('alipay_order_status_id'));
                 log_result("Alipay order_id :: " . $order_id . " Update Successfully.");
             }
         } else {
             if ($trade_status == 'WAIT_BUYER_CONFIRM_GOODS') {
                 log_result("Alipay order_id :: " . $order_id . " trade_status == WAIT_BUYER_CONFIRM_GOODS, update order_status_id from " . $order_status_id . " to " . $order_status['Complete']);
                 if ($order_status['Complete'] > $order_status_id) {
                     $this->model_checkout_order->confirm($order_id, $order_status['Complete']);
                     log_result("Alipay order_id :: " . $order_id . " Update Successfully.");
                 }
             } else {
                 if ($trade_status == 'TRADE_FINISHED') {
                     log_result("Alipay order_id :: " . $order_id . " trade_status == TRADE_FINISHED ,update order_status_id from " . $order_status_id . " to " . $order_status['Complete']);
                     if ($order_status['Complete'] > $order_status_id) {
                         $this->model_checkout_order->confirm($order_id, $order_status['Complete']);
                         log_result("Alipay order_id :: " . $order_id . " Update Successfully.");
                     }
                 }
             }
         }
     }
 }
예제 #19
0
 private function yanzheng()
 {
     require_once TENPAY_PATH . "/lib/classes/ResponseHandler.class.php";
     require_once TENPAY_PATH . "/lib/classes/function.php";
     require_once TENPAY_PATH . "/lib/tenpay_config.php";
     log_result("进入前台回调页面");
     /* 创建支付应答对象 */
     $resHandler = new ResponseHandler();
     $resHandler->setKey($key);
     //判断签名
     if ($resHandler->isTenpaySign()) {
         return $resHandler;
     } else {
         return false;
     }
 }
예제 #20
0
    //可获取的其他参数还有
    //bank_type			银行类型,默认:BL
    //fee_type			现金支付币种,目前只支持人民币,默认值是1-人民币
    //input_charset		字符编码,取值:GBK、UTF-8,默认:GBK。
    //partner			商户号,由财付通统一分配的10位正整数(120XXXXXXX)号
    //product_fee		物品费用,单位分。如果有值,必须保证transport_fee + product_fee=total_fee
    //sign_type			签名类型,取值:MD5、RSA,默认:MD5
    //time_end			支付完成时间
    //transport_fee		物流费用,单位分,默认0。如果有值,必须保证transport_fee +  product_fee = total_fee
    //判断签名及结果
    if ("0" == $trade_state) {
        //----------------------
        //即时到帐处理业务开始
        //-----------------------
        //处理数据库逻辑
        //注意交易单不要重复处理
        //注意判断返回金额
        //-----------------------
        //即时到帐处理业务完毕
        //-----------------------
        //给财付通系统发送成功信息,给财付通系统收到此结果后不在进行后续通知
        log_result("后台通知成功");
    } else {
        log_result("后台通知失败");
    }
    //回复服务器处理成功
    echo "Success";
} else {
    echo "<br/>" . "验证签名失败" . "<br/>";
    echo $resHandler->getDebugInfo() . "<br>";
}
예제 #21
0
require_once '../require.php';
require_once CLASS_REALDIR . '/aripay/alipay_service.php';
require_once CLASS_REALDIR . '/helper/SC_Helper_Purchase.php';
$link = "hogegoe";
$orderid = $_GET["id"];
if (!is_null($orderid)) {
    $objPurchase = new SC_Helper_Purchase();
    $orderInfo = $objPurchase->getOrder($orderid);
    if (!is_null($orderInfo)) {
        // 7:決済処理中 ,1:新規受付,2:入金待ち
        if ($orderInfo["status"] == 7 || $orderInfo["status"] == 1 || $orderInfo["status"] == 2) {
            $parameter = array("service" => "create_forex_trade", "partner" => ARIPAY_PARTNER, "return_url" => "hogehoge", "notify_url" => ARIPAY_NOTIFY_URL_HTTP, "_input_charset" => ARIPAY_INPUT_CHARSET, "subject" => "会社", "body" => "おいしいケーキ", "out_trade_no" => $orderid, "total_fee" => $orderInfo["total"], "currency" => "JPY");
            $alipay = new alipay_service($parameter, ARIPAY_SECURITY_CODE, ARIPAY_SIGN_TYPE);
            print_r($parameter);
            $link = $alipay->create_url();
            log_result($orderid . "アリペイURL:" . $link);
            //			echo $link;
            //			print <<<EOT
            //<br/>
            //<a href= $link  target= "_blank">submit</a>
            //EOT;
        }
    }
}
header("Location: " . $link);
function log_result($word)
{
    $fp = fopen("request_log.log", "a");
    flock($fp, LOCK_EX);
    fwrite($fp, $word . "」コexecution date 」コ" . strftime("%Y%m%d%H%I%S", time()) . "\t\n");
    flock($fp, LOCK_UN);
예제 #22
0
 public function notify()
 {
     //使用通用通知接口
     $notify = new \Notify_pub();
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
     //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
     //以log文件形式记录回调信息
     //$log_ = new Log_();
     $log_name = "notify_url.log";
     //log文件路径
     log_result($log_name, "【接收到的notify通知】:\n" . $xml . "\n");
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【通信出错】:\n" . $xml . "\n");
         } elseif ($notify->data["result_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【业务出错】:\n" . $xml . "\n");
         } else {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【支付成功】:\n" . $xml . "\n");
             $info = $notify->xmlToarray($xml);
             $notice_sn = $info['out_trade_no'];
             $order_info['out_notice_sn'] = $info['transaction_id'];
             $order_info['is_paid'] = 1;
             $order_info['pay_time'] = get_gmtime();
             $order = M("order");
             $order_info1 = $order->where("notice_sn={$notice_sn}")->select();
             if ($order_info1['is_paid'] == 1) {
                 exit;
             } else {
                 $pay_time1 = $order->where("notice_sn={$notice_sn}")->getField('pay_time');
                 if ($pay_time1 == 0) {
                     $result = $order->where("notice_sn={$notice_sn}")->save($order_info);
                     // 根据条件更新记录
                 }
                 if (false !== $result && isset($result)) {
                     $number = $order->where("notice_sn={$notice_sn} AND is_paid =1")->getField('number');
                     $goods_id = $order->where("notice_sn={$notice_sn} AND is_paid =1")->getField('goods_id');
                     M("goods")->where("id={$goods_id}")->setInc('pay_number', $number);
                     $pay_number = M("goods")->where("id={$goods_id}")->getField('pay_number');
                     $total_number = M("goods")->where("id={$goods_id}")->getField('number');
                     if ($pay_number >= $total_number) {
                         $goods['type'] = 2;
                         $goods['end_time'] = get_gmtime();
                         M("goods")->where("id={$goods_id}")->save($goods);
                         // 根据条件更新记录
                     }
                     $unique = M("unique");
                     $total_lucky_number = $unique->where("goods_id={$goods_id}")->getField('lucky_number');
                     $total_lucky_number = unserialize($total_lucky_number);
                     $lucky_number = array_slice($total_lucky_number, 0, $number);
                     $rem_lucky_number = array_slice($total_lucky_number, $number);
                     $lucky_number1['lucky_number'] = serialize($lucky_number);
                     $rem_lucky_number1['lucky_number'] = serialize($rem_lucky_number);
                     M("unique")->where("goods_id={$goods_id}")->save($rem_lucky_number1);
                     $order->where("notice_sn={$notice_sn}")->save($lucky_number1);
                 }
             }
         }
     }
 }
예제 #23
0
        $mytrade_no = $_POST['trade_no'];
        // 交易号
        $buyer_email = $_POST['buyer_email'];
        //买家支付宝帐号
        $total_fee = $_POST['total_fee'];
        //交易金额
        $data = array();
        $data['out_trade_no'] = $mydingdan;
        $data['trade_no'] = $mytrade_no;
        $data['trade_status'] = $myresult;
        $data['buyer_email'] = $buyer_email;
        $data['total_fee'] = $total_fee;
        $out = new paydataClass();
        $result = $out->detail($mydingdan);
        if (is_array($result) && !empty($result) && count($result) > 0) {
            $data['update_time'] = TIMENOW;
            $out->update($data, $result['id']);
        } else {
            $data['create_time'] = TIMENOW;
            $data['update_time'] = TIMENOW;
            $out->create($data);
        }
        echo "success";
        // 请不要修改或删除,在判断交易正常后,必须在页面输出success
        log_result("success");
    } else {
        echo "fail";
    }
} else {
    echo "fail";
}
예제 #24
0
require_once "class/alipay_notify.php";
require_once "alipay_config.php";
// 构造通知函数信息
$alipay = new alipay_notify($partner, $sec_id, $_input_charset);
// 计算得出通知验证结果
$verify_result = $alipay->notify_verify();
// 判断验签是否成功
if ($verify_result) {
    // 解密notify_data数据,并获得该xml节点的状态
    $status = getDataForXML(decrypt($_POST['notify_data']), '/notify/trade_status');
    // 判断交易是否完成
    if ($status == 'TRADE_FINISHED') {
        // 在判断交易完成后,必须在页面输出success
        echo "success";
        // 记录日志
        // log_result("success");
        /**
         * ********************************这里配置商户的业务逻辑************************************
         */
    } else {
        // 交易未完成
        echo "fail";
        // 记录日志
        log_result("");
    }
} else {
    // 验签失败,输出fail,支付宝会24小时根据策略重发总共7次
    echo "fail";
    // 记录日志
    log_result("");
}
예제 #25
0
 
    $receive_name    =$receive_name;    //获取收货人姓名
	$receive_address =$receive_address; //获取收货人地址
	$receive_zip     =$receive_zip;     //获取收货人邮编
	$receive_phone   =$receive_phone;   //获取收货人电话
	$receive_mobile  =$receive_mobile;  //获取收货人手机
*/
if ($verify_result) {
    //认证合格
    if ($out_trade_no != $charge_orderid) {
        $charge_status = 2;
        $charge_errcode = '订单号不匹配';
        $note = $charge_errcode . 'S:' . $charge_orderid . 'R:' . $out_trade_no;
        log_result($note);
    } else {
        if ($total_fee != $charge_money) {
            $charge_status = 2;
            $charge_errcode = '充值金额不匹配';
            $note = $charge_errcode . 'S:' . $charge_money . 'R:' . $total_fee;
            log_result($note);
        } else {
            $charge_status = 1;
        }
    }
    //这里放入你自定义代码,比如根据不同的trade_status进行不同操作
    //log_result("verify_success");
}
function log_result($word)
{
    log_write($word, 'ralipay');
}
예제 #26
0
 public function callback_international()
 {
     //trade_create_by_buyer 双接口 ,create_direct_pay_by_user 直接到帐,create_partner_trade_by_buyer 担保接口
     log_result("Alipay :: exciting callback_international function.");
     $oder_success = FALSE;
     $this->load->library('encryption');
     $trade_type = "alipay.trade.direct.forcard.pay";
     $seller_email = "*****@*****.**";
     // 商家邮箱
     $partner = "2088011357497434";
     //合作伙伴ID
     $security_code = "qo58xp4g1ywibtiiyns1gftw5mbv5rs3";
     //安全检验码
     $_input_charset = "utf-8";
     $sign_type = "MD5";
     $transport = 'http';
     $alipay = new alipay_notify($partner, $security_code, $sign_type, $_input_charset, $transport);
     $verify_result = $alipay->notify_verify();
     $order_status = array("paying" => 1, "payed" => 2, "shiping" => 3, "shipped" => 4, "stayin" => 5, "storage" => 6);
     if ($verify_result) {
         $order_id = $_POST['out_trade_no'];
         //$_POST['out_trade_no'];
         $trade_status = $_POST['trade_status'];
         $total_fee = $_POST['total_fee'];
         //log_result("order_id:" . $order_id . "trade_status:" . $trade_status . "total_fee:" . $total_fee);
         if (strpos($order_id, 'cz')) {
             if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                 $order_id_array = explode("-", $order_id);
                 $order_id = $order_id_array[1];
                 $customer_id = $order_id_array[2];
                 //log_result("alipay_international_cz this is test order_id:" . $order_id . "this is test customer_id". $customer_id);
                 $data = array('state' => 1, 'successtime' => time(), 'remark' => "OK", 'rid' => $order_id);
                 $this->load->model('account/rechargerecord');
                 $this->load->model('account/customer');
                 $this->model_account_rechargerecord->updateRechargerecord($data);
                 $money = $this->model_account_rechargerecord->getMoneybyid($order_id);
                 $this->model_account_customer->editBalance($money, $customer_id);
                 echo "success";
             } else {
                 echo "fail";
             }
         } else {
             if (strpos($order_id, 'yd')) {
                 $this->load->model('order/order');
                 $sendorder_id_array = explode("-", $order_id);
                 $sendorder_id = $sendorder_id_array[1];
                 $customer_id = $sendorder_id_array[2];
                 //log_result("sendorder0".$sendorder_id_array[0]."-sendorder1".$sendorder_id_array[1]."-sendorder2".$sendorder_id_array[2]);
                 //log_result("kennewei".$sendorder_id);
                 $sendorder_array = explode(",", $sendorder_id);
                 //$sendorder_array = array_filter($sendorder_array);
                 $sendorder_info = $this->model_order_order->getSendorderById($sendorder_array[0]);
                 if ($sendorder_info['state'] < 1) {
                     if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                         $this->model_order_order->UpdateSendorderPay($sendorder_array);
                         //插入消费记录
                         $this->load->model('account/customer');
                         $customer_info = $this->model_account_customer->getCustomer($customer_id);
                         $first_name = $customer_info['firstname'];
                         $accountmoney = $customer_info['money'];
                         $data2 = array('uid' => $customer_id, 'firstname' => $first_name, 'payname' => '支付宝支付', 'money' => -$total_fee, 'accountmoney' => $accountmoney, 'remark' => "提交运单费用,运单ID:" . $sendorder_id, 'remarktype' => 2, 'remarkdetails' => $sendorder_id, 'addtime' => time());
                         //log_result("firstname".$first_name . "---money".$total_fee . "---accountmoney".$accountmoney ."---sendorder_id".$value);
                         $this->load->model('account/record');
                         $this->model_account_record->addRecord($data2);
                         echo "success";
                     } else {
                         echo "fail";
                     }
                 } else {
                     echo "fail";
                 }
             } else {
                 $this->load->model('checkout/order');
                 $order_customer = explode("-", $order_id);
                 $order_id = $order_customer[0];
                 $customer_id = $order_customer[1];
                 $orders_id = explode(",", $order_id);
                 $order_id = $orders_id[0];
                 $order_info = $this->model_checkout_order->getOrder($order_id);
                 //log_result("Alipay order_id :: " . $order_id);
                 if ($order_info) {
                     $order_status_id = $order_info["order_status_id"];
                     //log_result("Alipay order_id :: " . $order_id . " order_status_id = " . $order_status_id . " , trade_status :: " . $trade_status);
                     //log_result("Alipay order_id :: Complete status = " . $order_status['Complete']);
                     // 确定订单没有重复支付
                     if ($order_status_id < $order_status['payed']) {
                         // 根据接口类型动态使用支付方法,默认使用直接到账接口类型
                         $this->func_create_direct_pay_by_user($orders_id, $order_status_id, $order_status, $trade_status);
                         //插入消费记录
                         $this->load->model('account/customer');
                         $customer_info = $this->model_account_customer->getCustomer($customer_id);
                         $first_name = $customer_info['firstname'];
                         $accountmoney = $customer_info['money'];
                         $order_record = implode(",", $orders_id);
                         $data1 = array('uid' => $customer_id, 'firstname' => $first_name, 'payname' => '支付宝支付', 'money' => -$total_fee, 'accountmoney' => $accountmoney, 'remark' => "提交代购订单费用,订单ID:" . $order_record, 'remarktype' => 1, 'remarkdetails' => $order_record, 'addtime' => time());
                         $this->load->model('account/record');
                         $this->model_account_record->addRecord($data1);
                         echo "success";
                     } else {
                         echo "fail";
                     }
                 } else {
                     //log_result("Alipay No Order Found.");
                     echo "fail";
                 }
             }
         }
     }
 }
예제 #27
0
        }
        //执行支付成功操作
        include_once INC_PATH . "/recharge.class.php";
        $rechargeobj = RechargeClass::init();
        //收取手续费的规则
        $total_fee = $total_fee * 0.96 - 0.3;
        $money = $rechargeobj->ratechange($total_fee, 'USD');
        $rechargeobj->paysuccess($dingdan, $money);
        echo '支付成功!';
    } else {
        //输出支付失败提示
        showmsg("支付未完成!", "../../../m.php");
    }
} else {
    if (isset($paypal['business'])) {
        log_result("error" . date("Y-M-D H:d:S"));
        //输出支付失败提示
        showmsg("支付未完成!", "../../../m.php");
    } else {
        //输出支付失败提示
        showmsg("支付未完成!", "../../../m.php");
    }
}
//日志消息,记录反馈的参数记录下来
function log_result($word)
{
    $fp = fopen("log.txt", "a");
    flock($fp, LOCK_EX);
    fwrite($fp, $word . ":执行日期:" . strftime("%Y%m%d%H%I%S", time()) . "\t\n");
    flock($fp, LOCK_UN);
    fclose($fp);
예제 #28
0
 public function callback()
 {
     $oder_success = FALSE;
     // 获取商家信息
     $this->load->library('encryption');
     $seller_email = $this->config->get('alipay_dual_seller_email');
     // 商家邮箱
     $security_code = $this->config->get('alipay_dual_security_code');
     //安全检验码
     $partner = $this->config->get('alipay_dual_partner');
     //合作伙伴ID
     $_input_charset = "utf-8";
     //字符编码格式  目前支持 GBK 或 utf-8
     $sign_type = "MD5";
     //加密方式  系统默认(不要修改)
     $transport = 'http';
     //访问模式,你可以根据自己的服务器是否支持ssl访问而选择http以及https访问模式(系统默认,不要修改)
     log_result("callback start.");
     //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
     $notify_url = HTTP_SERVER . 'catalog/controller/payment/alipay_dual_notify_url.php';
     $return_url = HTTPS_SERVER . 'index.php?route=checkout/success';
     //合作身份者id,以2088开头的16位纯数字
     $aliapy_config['partner'] = trim($partner);
     //安全检验码,以数字和字母组成的32位字符
     $aliapy_config['key'] = trim($security_code);
     //签约支付宝账号或卖家支付宝帐户
     $aliapy_config['seller_email'] = trim($seller_email);
     //页面跳转同步通知页面路径,要用 http://格式的完整路径,不允许加?id=123这类自定义参数
     //return_url的域名不能写成http://localhost/trade_create_by_buyer_php_utf8/return_url.php ,否则会导致return_url执行无效
     $aliapy_config['return_url'] = $return_url;
     //'http://127.0.0.1/trade_create_by_buyer_php_utf8/return_url.php';
     //服务器异步通知页面路径,要用 http://格式的完整路径,不允许加?id=123这类自定义参数
     $aliapy_config['notify_url'] = $notify_url;
     //'http://www.xxx.com/trade_create_by_buyer_php_utf8/notify_url.php';
     //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
     //签名方式 不需修改
     $aliapy_config['sign_type'] = 'MD5';
     //字符编码格式 目前支持 gbk 或 utf-8
     $aliapy_config['input_charset'] = 'utf-8';
     //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
     $aliapy_config['transport'] = 'http';
     //计算得出通知验证结果
     $alipayNotify = new AlipayDualNotify($aliapy_config);
     $verify_result = $alipayNotify->verifyNotify();
     if ($verify_result) {
         //验证成功
         log_result('验证成功');
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         //请在这里加上商户的业务逻辑程序代
         //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
         //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
         $out_trade_no = $_POST['out_trade_no'];
         //获取订单号
         $trade_no = $_POST['trade_no'];
         //获取支付宝交易号
         $total = $_POST['price'];
         //获取总价格
         //获取支付宝的反馈参数
         $order_id = $out_trade_no;
         //获取支付宝传递过来的订单号
         $this->load->model('checkout/order');
         // 获取订单ID
         $order_info = $this->model_checkout_order->getOrder($order_id);
         // 存储订单至系统数据库
         if ($order_info) {
             $order_status_id = $order_info["order_status_id"];
             $alipay_dual_order_status_id = $this->config->get('alipay_dual_order_status_id');
             $alipay_dual_wait_buyer_pay = $this->config->get('alipay_dual_wait_buyer_pay');
             $alipay_dual_wait_buyer_confirm = $this->config->get('alipay_dual_wait_buyer_confirm');
             $alipay_dual_trade_finished = $this->config->get('alipay_dual_trade_finished');
             $alipay_dual_wait_seller_send = $this->config->get('alipay_dual_wait_seller_send');
             if (1 > $order_status_id) {
                 log_result('order->confirm order_status_id=' . $order_status_id);
                 $this->model_checkout_order->confirm($order_id, $alipay_dual_order_status_id);
             }
             log_result('order_id=' . $order_id . ' order_status_id=' . $order_status_id);
             // 避免处理已完成的订单
             if ($order_status_id != $alipay_dual_trade_finished) {
                 if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
                     log_result('==alipay_dual_wait_buyer_pay==');
                     //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
                     //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                     //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                     //如果有做过处理,不执行商户的业务程序
                     if ($order_status_id != $alipay_dual_trade_finished && $order_status_id != $alipay_dual_wait_buyer_confirm && $order_status_id != $alipay_dual_wait_seller_send) {
                         $this->model_checkout_order->update($order_id, $alipay_dual_wait_buyer_pay);
                         echo "success - alipay_dual_wait_buyer_pay";
                         //请不要修改或删除
                         //调试用,写文本函数记录程序运行情况是否正常
                         log_result('success - alipay_dual_wait_buyer_pay');
                     }
                 } else {
                     if ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
                         log_result('==alipay_dual_wait_seller_send==');
                         //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货
                         //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                         //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                         //如果有做过处理,不执行商户的业务程序
                         if ($order_status_id != $alipay_dual_trade_finished && $order_status_id != $alipay_dual_wait_buyer_confirm) {
                             $this->model_checkout_order->update($order_id, $alipay_dual_wait_seller_send);
                             echo "success - alipay_dual_wait_seller_send";
                             //请不要修改或删除
                             //调试用,写文本函数记录程序运行情况是否正常
                             log_result('success - alipay_dual_wait_seller_send');
                         }
                     } else {
                         if ($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') {
                             log_result('==alipay_dual_wait_buyer_confirm==');
                             //该判断表示卖家已经发了货,但买家还没有做确认收货的操作
                             //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                             //如果有做过处理,不执行商户的业务程序
                             if ($order_status_id != $alipay_dual_trade_finished) {
                                 $this->model_checkout_order->update($order_id, $alipay_dual_wait_buyer_confirm);
                                 echo "success - alipay_dual_wait_buyer_confirm";
                                 //请不要修改或删除
                                 //调试用,写文本函数记录程序运行情况是否正常
                                 log_result('success - alipay_dual_wait_buyer_confirm');
                             }
                         } else {
                             if ($_POST['trade_status'] == 'TRADE_FINISHED') {
                                 //该判断表示买家已经确认收货,这笔交易完成
                                 //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                                 //如果有做过处理,不执行商户的业务程序
                                 $this->model_checkout_order->update($order_id, $alipay_dual_trade_finished);
                                 echo "success - alipay_dual_trade_finished";
                                 //请不要修改或删除
                                 //调试用,写文本函数记录程序运行情况是否正常
                                 log_result('success - alipay_dual_trade_finished');
                             } else {
                                 //其他状态判断
                                 $this->model_checkout_order->update($order_id, $alipay_dual_order_status_id);
                                 echo "success";
                                 //调试用,写文本函数记录程序运行情况是否正常
                                 //logResult ("这里写入想要调试的代码变量值,或其他运行的结果记录");
                             }
                         }
                     }
                 }
             }
         }
         //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     } else {
         //验证失败
         echo "fail";
         //调试用,写文本函数记录程序运行情况是否正常
         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
     }
 }
예제 #29
0
                     break;
                 case "10":
                     //退款关闭
                     break;
                 default:
                     //nothing to do
                     break;
             }
             //------------------------------
             //处理业务完毕
             //------------------------------
             echo "success";
         } else {
             //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。
             //echo "验证签名失败 或 业务错误信息:trade_state=" . $resHandler->getParameter("trade_state") . ",retcode=" . $queryRes->             										       getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ;
             log_result("中介担保后台回调失败");
             echo "fail";
         }
     }
     //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题
     /*
     echo "<br>------------------------------------------------------<br>";
     echo "http res:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo() . "<br>";
     echo "query req:" . htmlentities($queryReq->getRequestURL(), ENT_NOQUOTES, "GB2312") . "<br><br>";
     echo "query res:" . htmlentities($queryRes->getContent(), ENT_NOQUOTES, "GB2312") . "<br><br>";
     echo "query reqdebug:" . $queryReq->getDebugInfo() . "<br><br>" ;
     echo "query resdebug:" . $queryRes->getDebugInfo() . "<br><br>";
     */
 } else {
     //通信失败
     echo "fail";
예제 #30
0
 public function callback()
 {
     $oder_success = FALSE;
     // 获取商家信息
     $this->load->library('encryption');
     $seller_email = $this->config->get('alipay_direct_seller_email');
     // 商家邮箱
     $security_code = $this->config->get('alipay_direct_security_code');
     //安全检验码
     $partner = $this->config->get('alipay_direct_partner');
     //合作伙伴ID
     $_input_charset = "utf-8";
     //字符编码格式  目前支持 GBK 或 utf-8
     $sign_type = "MD5";
     //加密方式  系统默认(不要修改)
     $transport = 'http';
     //访问模式,你可以根据自己的服务器是否支持ssl访问而选择http以及https访问模式(系统默认,不要修改)
     log_result("callback start.");
     // 获取支付宝返回的数据
     $alipay = new alipay_notify($partner, $security_code, $sign_type, $_input_charset, $transport);
     $verify_result = $alipay->notify_verify();
     if ($verify_result) {
         //认证合格
         //获取支付宝的反馈参数
         $order_id = $_POST['out_trade_no'];
         //获取支付宝传递过来的订单号
         $this->load->model('checkout/order');
         // 获取订单ID
         $order_info = $this->model_checkout_order->getOrder($order_id);
         // 存储订单至系统数据库
         if ($order_info) {
             $order_status_id = $order_info["order_status_id"];
             $alipay_direct_order_status_id = $this->config->get('alipay_direct_order_status_id');
             $alipay_direct_wait_buyer_pay = $this->config->get('alipay_direct_wait_buyer_pay');
             $alipay_direct_wait_buyer_confirm = $this->config->get('alipay_direct_wait_buyer_confirm');
             $alipay_direct_trade_finished = $this->config->get('alipay_direct_trade_finished');
             $alipay_direct_wait_seller_send = $this->config->get('alipay_direct_wait_seller_send');
             if (1 > $order_status_id) {
                 log_result('order->confirm order_status_id=' . $order_status_id);
                 $this->model_checkout_order->confirm($order_id, $alipay_direct_order_status_id);
             }
             // 避免处理已完成的订单
             log_result('order_id=' . $order_id . ' order_status_id=' . $order_status_id);
             if ($order_status_id != $alipay_direct_trade_finished) {
                 log_result("No finished.");
                 // 获取原始订单的总额
                 $currency_code = $this->config->get('alipay_direct_currency_code');
                 //人民币代号(CNY)
                 $total = $order_info['total'];
                 log_result('total=' . $total);
                 if ($currency_code == '') {
                     $currency_code = 'CNY';
                 }
                 $currency_value = $this->currency->getValue($currency_code);
                 log_result('currency_value=' . $currency_value);
                 $amount = $total * $currency_value;
                 $amount = number_format($amount, 2, '.', '');
                 log_result('amount=' . $amount);
                 // 支付宝付款金额
                 $total = $_POST['total_fee'];
                 // 获取支付宝传递过来的总价格
                 log_result('total_fee=' . $total);
                 /*
                 $receive_name    =$_POST['receive_name'];    //获取收货人姓名
                 $receive_address =$_POST['receive_address']; //获取收货人地址
                 $receive_zip     =$_POST['receive_zip'];     //获取收货人邮编
                 $receive_phone   =$_POST['receive_phone'];   //获取收货人电话
                 $receive_mobile  =$_POST['receive_mobile'];  //获取收货人手机
                 */
                 /*
                 	获取支付宝反馈过来的状态,根据不同的状态来更新数据库 
                 	//TRADE_FINISHED(表示交易已经成功结束,通用即时到帐反馈的交易状态成功标志);
                 	//TRADE_SUCCESS(表示交易已经成功结束,高级即时到帐反馈的交易状态成功标志);
                 */
                 log_result("trade_status:" . $_POST['trade_status']);
                 if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
                     log_result('==alipay_direct_wait_buyer_pay==');
                     //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
                     //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                     //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                     //如果有做过处理,不执行商户的业务程序
                     if ($order_status_id != $alipay_direct_trade_finished && $order_status_id != $alipay_direct_wait_buyer_confirm && $order_status_id != $alipay_direct_wait_seller_send) {
                         $this->model_checkout_order->update($order_id, $alipay_direct_wait_buyer_pay);
                         echo "success - alipay_direct_wait_buyer_pay";
                         //请不要修改或删除
                         //调试用,写文本函数记录程序运行情况是否正常
                         log_result('success - alipay_direct_wait_buyer_pay');
                     }
                 } else {
                     if ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
                         log_result('==alipay_direct_wait_seller_send==');
                         //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货
                         //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                         //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                         //如果有做过处理,不执行商户的业务程序
                         if ($order_status_id != $alipay_direct_trade_finished && $order_status_id != $alipay_direct_wait_buyer_confirm) {
                             $this->model_checkout_order->update($order_id, $alipay_direct_wait_seller_send);
                             echo "success - alipay_direct_wait_seller_send";
                             //请不要修改或删除
                             //调试用,写文本函数记录程序运行情况是否正常
                             log_result('success - alipay_direct_wait_seller_send');
                         }
                     } else {
                         if ($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
                             //交易成功结束
                             //这里放入你自定义代码,比如根据不同的trade_status进行不同操作
                             $this->model_checkout_order->update($order_id, $alipay_direct_trade_finished);
                             echo "success - alipay_direct_trade_finished";
                             //请不要修改或删除
                             //调试用,写文本函数记录程序运行情况是否正常
                             log_result('success - alipay_direct_trade_finished');
                             log_result("finished.");
                         } else {
                             echo "fail";
                             log_result("verify_failed");
                         }
                     }
                 }
             }
         }
     }
 }