yzms/show/pay_recv_consume.php

220 lines
7.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
require_once(dirname(__FILE__)."/common.php");
function verifySign($data, $sign, $cer_data)
{
$s = base64_encode($cer_data);
$s = "-----BEGIN CERTIFICATE-----\n".wordwrap($s, 64, "\n", true)."\n-----END CERTIFICATE-----\n";
//$cert = openssl_x509_read($s);
$pubkey = openssl_get_publickey($s);
//var_dump($pubkey);
return openssl_verify($data, base64_decode($sign), $pubkey, OPENSSL_ALGO_SHA1);
}
function is_mobile() {
$isphone = stristr($_SERVER['HTTP_USER_AGENT'], "windows nt")?false:true;
return $isphone;
}
function cancel_order($order_ids){
global $db;
foreach ($order_ids as $v){
$order_id = $v;
// 删除order 和 order_detail
$oInfo = $db->get_one("select * from tb_order where id=".$order_id);
$date_id = $oInfo['date_id'];
$data = $db->get_one("select * from tb_order_detail where order_id=".$order_id);
foreach ($data as $item){
$db->update("tb_date_dish", array('book_num'=>"book_num"-$item['dish_amount']), "date_id='{$date_id}' and dish_id='{$item['dish_id']}'");
}
$db->delete("tb_order_detail", "order_id='{$order_id}'");
$db->delete("tb_order", "id='{$order_id}'");
}
}
/*
* $data ===> array('uid'=>$user_id)
*/
function update_order($order_ids, $data){
global $db;
if(!is_array($order_ids)){
$order_ids = explode(',', $order_ids);
}
foreach ($order_ids as $k => $v){
$db->update("tb_order", $data, "id='{$v}'");
}
}
function clear_cart($uid){
global $db;
$db->delete("tb_cart", "uid='{$uid}'");
}
function createReceiveMealNum($dish_ids, $company_id, $date_id, $oid, $uid){
global $db;
$info = $db->get_one("select * from tb_dish_receive_meal where status='1' and company_id='{$company_id}'");
if(empty($info)){
return "";
}
$serialNumDish = explode(',', $info['dish_ids']);
$dish_ids_arr = explode(',', $dish_ids);
$jiaoji = array_intersect($serialNumDish, $dish_ids_arr);
if(empty($jiaoji)){
return "";
}
// 获取已经编号的
$getSerialInfo = $db->get_one("select max(serial_num) max_num from tb_dish_receive_meal_num where company_id='{$company_id}' and date_id='{$date_id}'");
// 生成编号
$serialArr = array(
'company_id' => $company_id,
'oid' => $oid,
'serial_num' => $getSerialInfo['max_num']+1,
'date_id' => $date_id,
'add_time' => date('Y-m-d H:i:s'),
'uid' => $uid,
);
$insertDataStr = "";
foreach ($serialArr as $k => $v){
$insertDataStr .= ",{$k}='{$v}'";
}
$insertDataStr = substr($insertDataStr, 1, strlen($insertDataStr)-1);
$db->query("insert into tb_dish_receive_meal_num set {$insertDataStr}", 'SILENT');
return $db->affected_rows();
}
$ua = $_SERVER['HTTP_USER_AGENT'];
$ispc = stristr($ua, "windows nt")?true:false;
//file_put_contents("rs_".rand().".txt", print_r($_GET, 1)."\n\n".print_r($_POST, 1)."\n\n".file_get_contents("php://input")."\n\n");
$json = file_get_contents("php://input");
/*$json = '{"ccy":"156","discountAmt":"0","goodsInfo":"订餐系统充值0.01元","institutionCode":null,"merchantNo":"3178032723083685","originalTradeNo":null,"outTradeNo":"TEST1542871488","payAmt":"1","resultCode":null,"resultMsg":null,"serialVersionUID":"-4533305937881824905","sign":"GoUcjtdcsp1Q6NSoKz/cX06PYZnFwMghTHSky8KtQQspvysEHdiMWCSeB7/oe+x5DY+Rv7Q+Ohz7hbXBTTSpGLT3l2vzMYj87hW6kpDEAPODuXzUE++WA7VFGODAS0MuYWa24eABARAA8r6071pPcBvEbsUC6exBo5T20Cd7/fg=","tradeAmt":"1","tradeFinishedDate":"Thu Nov 22 15:25:21 CST 2018","tradeNo":"20181122100000210002106736310910","tradeReason":null,"tradeStatus":"SUCCESS","tradeType":"REAL_TIME_PRO"}';*/
if($json) {
$a = json_decode($json, true);
if(!$a) exit;
$ORDERSEQ = $a['outTradeNo'];
$ORDERAMOUNT = $a['tradeAmt'];
$tradeNo = $a['tradeNo'];
$row = $db->get_one("select * from tb_recharge_pay where ORDERSEQ='{$ORDERSEQ}'");
if(!$row) {
echo "no order";
exit;
}
$uid = $row['uid'];
$rList = array();
$order_ids = array();
if(!empty($row['rList'])){
$rList = unserialize($row['rList']);
$order_ids = array_column($rList, 'oid');
}else{
echo "no rList";
exit;
}
$cInfo = $db->get_one("select a.cellphone, b.* from tb_user a, tb_company b where a.company_id=b.id and a.id = ".$uid);
if(!$cInfo || !$cInfo['yzfcz_merchantId'] || !$cInfo['yzfcz_p12'] || !$cInfo['yzfcz_p12_pass'] || !$cInfo['yzfcz_cer'] || !strstr(','.$cInfo['allow_pay'].',', ',yzf,')) {
echo "USER ERROR";
}
$merid = $cInfo['yzfcz_merchantId'];
$yzfcz_cer = $cInfo['yzfcz_cer'];
$sign = $a['sign'];
if(!$sign){
cancel_order($order_ids);
exit;
};
unset($a['sign']);
foreach($a as $key => $item) {
if($item === null) $a[$key] = 'null';
}
ksort($a);
$tosign = get_kvstr($a);
//echo $tosign."\n\n";
//echo $sign."\n\n";
$r = verifySign($tosign, $sign, $yzfcz_cer);
if(!$r){
cancel_order($order_ids);
die("sign err!");
};
if(round($row['AMOUNT']*100) != $ORDERAMOUNT) {
cancel_order($order_ids);
echo "AMOUNT ERROR";
exit;
}
if($a['tradeStatus'] == 'SUCCESS') {
$db->query("insert into tb_recharge_pay_suc set ORDERSEQ='{$ORDERSEQ}', AMOUNT='".($ORDERAMOUNT/100)."', addtime=now()", 'SILENT');
if($db->affected_rows() == 1) {
// order表 update翼支付的ORDERSEQ
update_order($order_ids ,array('uid'=>$uid, 'yzf_code'=> $ORDERSEQ));
clear_cart($uid);
require_once("include/pay.inc.php");
$payInfo = array(
'ac_type' => '2',
'rtype' => '1',
'recharge_fund_type' => '1',
'oid' => $row['id'],
);
$r = gpay_add_user_account_uid($uid, $row['AMOUNT'], $payInfo);
$db->query("update tb_recharge_pay set UPTRANSEQ='{$tradeNo}', BANKID='', RETNCODE='SUCCESS', RETNINFO='', paytime=now(),notify_rs='".addslashes(trim(strip_tags($json)))."' where id=".$row['id']);
// 已经在type_id=2 充值之后进行消费记录tb_recharge
if($rList) { //扣费
$r = gpay_pay_user_account($uid, $rList, $updateInfo);
if($r != 'suc') {
foreach($rList as $item) { //支付失败,删除订单
cancel_order($item['oid']);
}
$pay_info = "";
if($r == 'yebz') {
$pay_info = "余额不足,下单失败";
} else {
$pay_info = "下单失败,请重试!";
}
$db->query("update tb_recharge_pay set pay_info='{$pay_info}' where id=".$row['id']);
echo "yebz";
exit;
}else{
// array('ac' => $total['total_price'], 'rtype' => RECHARGE_TYPE_PAY, 'ftid' => $date->dining_hall_id, 'oid' => $oid);
foreach ($rList as $k => $v){
$order_info = $db->get_one("select a.date_id,a.uid,a.id,group_concat(b.dish_id) dish_ids,c.company_id from tb_order a left join tb_order_detail b on a.id=b.order_id left join tb_user c on a.uid=c.id where a.id='{$v['oid']}' group by a.id");
createReceiveMealNum($order_info['dish_ids'], $order_info['company_id'], $order_info['date_id'], $order_info['id'], $order_info['uid']);
}
update_order($order_ids ,array('uid'=>$uid, 'yzf_code'=> $ORDERSEQ));
clear_cart($uid);
}
}
} else {
//echo "has";
}
$echo = "{
\"success\":true,
\"result\":
{
\"statusCode\": 200,
\"outTradeNo\":\"{$ORDERSEQ}\",
\"tradeNo\":\"{$tradeNo}\"
}
}";
echo $echo;
//file_put_contents("echo.txt", $echo);
}
exit;
}
$result = $_GET['result'];
if($result) {
if(strstr($result, '成功')) {
gredirect("../m/listOrder.html");
} else {
gredirect("../m/");
}
} else {
gredirect("../m/");
}