function notify_verify() { //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 if($this->transport == "https") { $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_POST["notify_id"]; } else { $veryfy_url = $this->gateway. "partner=".$this->partner."¬ify_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; } } }
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; }
function return_verify() { if ($this->transport == "https") { $veryfy_url = $this->gateway . "service=notify_verify" . "&partner=" . $this->partner . "¬ify_id=" . $_GET["notify_id"]; } else { $veryfy_url = $this->gateway . "partner=" . $this->partner . "¬ify_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; //**********************************ÉÏÃæдÈÕÖ¾ } }
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 . "¬ify_id=" . $notify_id; } else { $veryfy_url = $this->gateway . "partner=" . $this->partner . "¬ify_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; } } }
public function aaa() { $data = log_result(); $str = '2015255'; $reg = "/^2015/"; if (!preg_match_all($reg, $str, $arr)) { $this->ajaxReturn(['status' => 111, 'info' => '你不是小鲜肉']); } }
<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/>";
//原始图片比较大,压缩一下. 效果还是很明显的, 使用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() {
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); } } //商户自行增加处理流程, //例如:更新订单状态 //例如:数据库操作 //例如:推送支付完成信息 } }
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); } } //商户自行增加处理流程, //例如:更新订单状态 //例如:数据库操作 //例如:推送支付完成信息 } }
//---------------------- //即时到帐处理业务开始 //----------------------- //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //----------------------- //即时到帐处理业务完毕 //----------------------- //给财付通系统发送成功信息,给财付通系统收到此结果后不在进行后续通知 $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) { }
$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); }
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); } } }
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); }
<?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); }
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; }
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."); } } } } } }
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; } }
//可获取的其他参数还有 //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>"; }
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);
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); } } } } }
$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"; }
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(""); }
$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'); }
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"; } } } } }
} //执行支付成功操作 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);
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("这里写入想要调试的代码变量值,或其他运行的结果记录"); } }
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";
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"); } } } } } } }