433 lines
14 KiB
PHP
433 lines
14 KiB
PHP
|
<?
|
||
|
/*$publickeyData = "-----BEGIN PUBLIC KEY-----
|
||
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAVBWerYFCgDqECD2HCJibijI5SCB9GmsgSUlx
|
||
|
sTL083+nh979eJCH/U4QmV4i0rSnor0nghoZLNkg5oDCfEb5RZSleQmiPAe/YOl+vW27uR/tAXl0
|
||
|
bUADcm6rXp814d9ZWzcVnhxLCgQ+0hU0RvxTwWmkuUlxGgeKmuuHI5DDFQIDAQAB
|
||
|
-----END PUBLIC KEY-----
|
||
|
";
|
||
|
|
||
|
$privatekeyData = "-----BEGIN PRIVATE KEY-----
|
||
|
MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOC8riDCsH0TB8Y7BEIwQfcAVzN
|
||
|
1AmxCG7HFAhawXrhM/2YM4eSH+di6995domSUTMDY6V1sXxn0z3yydoRNtDs7W/UBPaeBXXtyPQ
|
||
|
Dv8w7W5UwmGEE9FCK7wsQhxOrLlZG1tuS7M/mZQg1ml9n8Z6ltAUNANAfpxV0+TpgWLka9AgMBA
|
||
|
AECgYEAi2DZSV4VYOydhLZzVK1jK9IdQr+NyiBR1rWNLw8hH4I5X0wcCMTAEkcalOFTZreGxo+A
|
||
|
Y71jWdC3oel4kWMzo+LPF8XpbeOutgjqVPy8cj1vWnz/ugWSRTR8fbCPJnECpU3diqQ5pus/ps3
|
||
|
zofTocNjij/Swn+vhR9HitwlfV6ECQQD53c+GS98du2QRePQ+JsU/JZyPMeTE613SKK0q/Wt0c+
|
||
|
gTWCu+LW+/D2dfElxz8/Ll4MM/9QOe7ZuhwQtxNjK1AkEA5kD0E0VaCJd+Kh/jQbVRNVT6bns+W
|
||
|
S6DyCpZF0laMO/tncrBq0nzIzy7ZWwOzzMpbzpk1Y7Yeiyd9hnKeCWg6QJBAKMUiFvorSjko31b
|
||
|
6l2eRGLgk3xKXjvAOq3t6ogCet24wKHPjE1FroeO8DL28uyjLcenmQfnTIOwJUG/k05Cx3kCQQC
|
||
|
ExON40T6vQZuwcp66XvEqzYtydYJoLlgy7ahdsyBco5zipe2y9XtL0FNGkl6fv6Kezo8iTbIqEN
|
||
|
ws8oY7bYcxAkEA33JtnwlDEydtgO4R2qt64KxZVlE+lE8C22RHoizQA8BH3pAAGB+QvvY6ybV4F
|
||
|
q1mTb5ciqaifmqhSWcgYZow3w==
|
||
|
-----END PRIVATE KEY-----
|
||
|
";
|
||
|
$accessKey = '_1AtDG8-VY_utm6eOgfOfxahyc9e0wTSPwdDXJekkR0=';
|
||
|
*/
|
||
|
|
||
|
$jdStatusInfo = array(
|
||
|
'1' => '新单',
|
||
|
'13' => '自提退货',
|
||
|
'2' => '等待支付',
|
||
|
'14' => '确认自提',
|
||
|
'3' => '等待支付确认',
|
||
|
'16' => '等待确认收货',
|
||
|
'4' => '延迟付款确认',
|
||
|
'17' => '配送退货',
|
||
|
'5' => '订单暂停',
|
||
|
'18' => '货到付款确认',
|
||
|
'6' => '店长最终审核',
|
||
|
'19' => '已完成',
|
||
|
'7' => '等待打印',
|
||
|
'21' => '收款确认',
|
||
|
'8' => '等待出库',
|
||
|
'22' => '锁定',
|
||
|
'9' => '等待打包',
|
||
|
'29' => '等待三方出库',
|
||
|
'10' => '等待发货',
|
||
|
'30' => '等待三方发货',
|
||
|
'11' => '自提途中',
|
||
|
'31' => '等待三方发货完成',
|
||
|
'12' => '上门提货'
|
||
|
);
|
||
|
function jd_add_log($url, $post, $rs) {
|
||
|
global $db;
|
||
|
if(is_array($post)) $post = json_encode($post);
|
||
|
$db->query("insert into tb_jd_api_log set url = '".addslashes($url)."', post = '".addslashes($post)."', rs = '".addslashes($rs)."', addtime = now() ", 'SILENT');
|
||
|
}
|
||
|
function jd_encrypt($s) {
|
||
|
global $publickey, $publickeyData;
|
||
|
if(!$publickey) $publickey = openssl_get_publickey($publickeyData);
|
||
|
openssl_public_encrypt($s, $s2, $publickey);
|
||
|
$s2 = base64_encode($s2);
|
||
|
return $s2;
|
||
|
}
|
||
|
function jd_decrypt($s) {
|
||
|
global $privatekey, $privatekeyData, $accessKey;
|
||
|
if(!$privatekey) $privatekey = openssl_get_privatekey($privatekeyData);
|
||
|
$s = base64_decode($s);
|
||
|
openssl_private_decrypt($s, $s2, $privatekey);
|
||
|
return $s2;
|
||
|
}
|
||
|
function jd_decrypt_public($s) {
|
||
|
global $publickey, $publickeyData;
|
||
|
if(!$publickey) $publickey = openssl_get_publickey($publickeyData);
|
||
|
$s = base64_decode($s);
|
||
|
openssl_public_decrypt($s, $s2, $publickey);
|
||
|
return $s2;
|
||
|
}
|
||
|
function jd_sign($data, $isLogin = false) {
|
||
|
global $privatekey, $privatekeyData, $accessKey;
|
||
|
if(!$privatekey) $privatekey = openssl_get_privatekey($privatekeyData);
|
||
|
|
||
|
$data['accessKey'] = $accessKey;
|
||
|
$time = time();
|
||
|
if(!$isLogin) $time = $time*1000;
|
||
|
$data['timestamp'] = $time;
|
||
|
|
||
|
$s = '';
|
||
|
ksort($data);
|
||
|
foreach($data as $key => $value) {
|
||
|
if($s != '') $s .= "&";
|
||
|
$s .= $key."=".$value;
|
||
|
}
|
||
|
//echo $s."\n";
|
||
|
$sha = hash("sha256", $s);
|
||
|
|
||
|
openssl_private_encrypt($sha, $sign, $privatekey);
|
||
|
$sign = base64_encode($sign);
|
||
|
if($isLogin) {
|
||
|
foreach($data as $key => $value) {
|
||
|
$data[$key] = jd_encrypt($value);
|
||
|
}
|
||
|
}
|
||
|
$data['sign'] = $sign;
|
||
|
return $data;
|
||
|
}
|
||
|
function jd_verify($data) {
|
||
|
global $privatekey, $privatekeyData, $accessKey;
|
||
|
if(!$privatekey) $privatekey = openssl_get_privatekey($privatekeyData);
|
||
|
if(!$data['sign']) return false;
|
||
|
|
||
|
foreach($data as $key => $value) {
|
||
|
if(($value."") === "") {
|
||
|
unset($data[$key]);
|
||
|
} else {
|
||
|
if($key != 'sign') $data[$key] = jd_decrypt($value);
|
||
|
}
|
||
|
}
|
||
|
//foreach($data as $key => $value) {
|
||
|
// if($key != 'sign') $data[$key] = jd_decrypt($value);
|
||
|
//}
|
||
|
$sha_jd = jd_decrypt_public($data['sign']);
|
||
|
unset($data['sign']);
|
||
|
|
||
|
$s = '';
|
||
|
ksort($data);
|
||
|
foreach($data as $key => $value) {
|
||
|
if($s != '') $s .= "&";
|
||
|
$s .= $key."=".$value;
|
||
|
}
|
||
|
//echo $s."\n";
|
||
|
$sha = hash("sha256", $s);
|
||
|
if($sha != $sha_jd) return false;
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
function gotoJd($uid, $returnUrl = '/index') {
|
||
|
global $accessKey;
|
||
|
$timestamp = time();
|
||
|
|
||
|
//$jd_url = "https://mes.jd.com/{$accessKey}/autoLogin";
|
||
|
//$returnUrl = "https://mes.jd.com/{$accessKey}".$returnUrl;
|
||
|
|
||
|
//$jd_url = "https://jxi-fuli-login.jd.com/autoLogin?appTarget=5&loginCode={$accessKey}";
|
||
|
//$returnUrl = "https://jfd-m.jd.com/fuli_page_wegoIndex";
|
||
|
|
||
|
$jd_url = "https://jxi-fuli-login.jd.com/autoLogin?appTarget=5&loginCode={$accessKey}";
|
||
|
$returnUrl = "https://jxi-fuli-m.jd.com/fuli_page_index";
|
||
|
|
||
|
|
||
|
//echo $uid;exit;
|
||
|
$uid = "yzmsdc_".$uid;
|
||
|
|
||
|
$data = array(
|
||
|
'returnUrl' => $returnUrl,
|
||
|
'uid' => $uid
|
||
|
);
|
||
|
|
||
|
$data = jd_sign($data, true);
|
||
|
|
||
|
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>jd</title></head><body>';
|
||
|
|
||
|
$html .= '<form method="post" name="jdform" action="'.$jd_url.'">';
|
||
|
|
||
|
foreach($data as $key => $value) $html .= '<input type="hidden" name="'.$key.'" value="'.$value.'" />';
|
||
|
|
||
|
$html .= '<input type="hidden" name="version" value="v1.0" />';
|
||
|
$html .= '</form><script>document.jdform.submit();</script></body></html>';
|
||
|
|
||
|
echo $html;
|
||
|
}
|
||
|
function jd_get_order_list() {
|
||
|
global $accessKey;
|
||
|
$post = array(
|
||
|
'pageNo' => '1',
|
||
|
'pageSize' => '20',
|
||
|
);
|
||
|
$post = jd_sign($post);
|
||
|
//print_r($post);exit;
|
||
|
$s = gquery("https://cvop.jd.com/component/http/JSON/youli/v1/order/getList", $post);
|
||
|
echo $s;
|
||
|
}
|
||
|
function jd_get_order_detail($jdOrderId) {
|
||
|
$post = array(
|
||
|
'jdOrderId' => $jdOrderId,
|
||
|
);
|
||
|
$post = jd_sign($post);
|
||
|
//print_r($post);exit;
|
||
|
$s = gquery("https://cvop.jd.com/component/http/JSON/youli/v1/order/getDetail", $post);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a || $a['success'] != 1 || !$a['result']['jdOrderId']) return false;
|
||
|
return $a['result'];
|
||
|
}
|
||
|
function jd_get_order_track($jdOrderId) {
|
||
|
$post = array(
|
||
|
'jdOrderId' => $jdOrderId,
|
||
|
);
|
||
|
$post = jd_sign($post);
|
||
|
//print_r($post);exit;
|
||
|
$s = gquery("https://cvop.jd.com/component/http/JSON/youli/v1/order/orderTrack", $post);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a || $a['success'] != 1 || !$a['result']['jdOrderId']) return false;
|
||
|
return $a['result'];
|
||
|
}
|
||
|
function jd_cancel_order($jdOrderId) {
|
||
|
$post_r = array(
|
||
|
'jdOrderId' => $jdOrderId,
|
||
|
);
|
||
|
$post = jd_sign($post_r);
|
||
|
//print_r($post);exit;
|
||
|
$url = "https://cvop.jd.com/component/http/JSON/youli/v1/order/cancel";
|
||
|
$s = gquery($url, $post);
|
||
|
jd_add_log($url, $post_r, $s);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a) return false;
|
||
|
return $a;
|
||
|
}
|
||
|
function jd_confirm_order($jdOrderId) {
|
||
|
$post_r = array(
|
||
|
'jdOrderId' => $jdOrderId,
|
||
|
);
|
||
|
$post = jd_sign($post_r);
|
||
|
$url = "https://cvop.jd.com/component/http/JSON/youli/v1/order/confirm";
|
||
|
$s = gquery($url, $post);
|
||
|
jd_add_log($url, $post_r, $s);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a) return false;
|
||
|
return $a;
|
||
|
}
|
||
|
function jd_get_aftersale($jdOrderId) {
|
||
|
$post = array(
|
||
|
'orderId' => $jdOrderId,
|
||
|
'pageSize' => 20,
|
||
|
'pageNo' => 1,
|
||
|
);
|
||
|
$post = jd_sign($post);
|
||
|
//print_r($post);exit;
|
||
|
$s = gquery("https://cvop.jd.com/component/http/JSON/youli/v1/afterSale/getList", $post);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a || $a['success'] != 1) return false;
|
||
|
return $a;
|
||
|
}
|
||
|
function jd_get_returnBpInfo($jdOrderId = '', $startDate = '', $pageNum = 1) {
|
||
|
$post = array(
|
||
|
'pageSize' => 100,
|
||
|
'pageNum' => $pageNum,
|
||
|
);
|
||
|
if($jdOrderId) $post['orderId'] = $jdOrderId;
|
||
|
if($startDate) $post['startDate'] = $startDate;
|
||
|
$post = jd_sign($post);
|
||
|
//print_r($post);exit;
|
||
|
$s = gquery("https://cvop.jd.com/component/http/JSON/youli/v1/order/queryReturnBpInfo", $post);
|
||
|
if(!$s) return false;
|
||
|
$a = json_decode($s, true);
|
||
|
if(!$a || $a['success'] != 1) return false;
|
||
|
return $a['result'];
|
||
|
}
|
||
|
function money_equal($m1, $m2) {
|
||
|
return round($m1*100)==round($m2*100);
|
||
|
}
|
||
|
if($act == 'jd_autoLogin') {
|
||
|
$GLOBALS['in_page'] = 1;
|
||
|
$GLOBALS['in_page_func'] = "jdLoginGetHTML";
|
||
|
//echoRs(0, '测试!');
|
||
|
$user = check_token();
|
||
|
|
||
|
$user_id = $user['id'];
|
||
|
$area_id = $user['area_id'];
|
||
|
$company_id = $user['company_id'];
|
||
|
|
||
|
$companyInfo = $db->get_one("select * from tb_company where id=".$company_id);
|
||
|
if(!$companyInfo) exit;
|
||
|
|
||
|
$jd_wg_key = $companyInfo['jd_wg_key'];
|
||
|
$a = explode("##", $jd_wg_key);
|
||
|
if(count($a) != 3) {
|
||
|
echoRs(0, '未开放商城!');
|
||
|
}
|
||
|
|
||
|
$publickeyData = "-----BEGIN PUBLIC KEY-----\n".implode("\n", str_split($a[0], 70))."\n-----END PUBLIC KEY-----\n";
|
||
|
$privatekeyData = "-----BEGIN PRIVATE KEY-----\n".implode("\n", str_split($a[1], 70))."\n-----END PRIVATE KEY-----\n";
|
||
|
$accessKey = $a[2];
|
||
|
|
||
|
gotoJd($user_id);
|
||
|
exit;
|
||
|
}
|
||
|
if($act == 'jd_cancel_order') {
|
||
|
$user = check_token();
|
||
|
$user_id = $user['id'];
|
||
|
|
||
|
$order_id = intval($_POST['order_id']);
|
||
|
$orderInfo = $db->get_one("select * from tb_goods_wg_order where id = {$order_id} and uid={$user_id}");
|
||
|
|
||
|
if(!$orderInfo) {
|
||
|
echoRs(0, '订单不存在!');
|
||
|
}
|
||
|
|
||
|
$status = $orderInfo['status'];
|
||
|
if($status == 1) {
|
||
|
echoRs(0, '该订单已支付!');
|
||
|
} else if($status == 2) {
|
||
|
echoRs(0, '该订单已取消!');
|
||
|
} else if($status != 0) {
|
||
|
exit;
|
||
|
}
|
||
|
$rs = jd_cancel_order($orderInfo['orderId']);
|
||
|
if(!$rs) {
|
||
|
echoRs(0, '取消失败,请重试!');
|
||
|
}
|
||
|
if($rs['success']) {
|
||
|
$db->query("update tb_goods_wg_order set status=2 where id=".$order_id);
|
||
|
echoRs(1, 'ok');
|
||
|
} else {
|
||
|
echoRs(0, '取消失败:'.$rs['resultMessage']);
|
||
|
}
|
||
|
|
||
|
exit;
|
||
|
}
|
||
|
if($act == 'jd_get_wg_wuliu') {
|
||
|
$user = check_token();
|
||
|
$user_id = $user['id'];
|
||
|
|
||
|
$wgid = intval($_REQUEST['wgid']);
|
||
|
$wOrder = $db->get_one("select * from tb_goods_wg_order where id = {$wgid} and uid=".$user_id);
|
||
|
if(!$wOrder) exit;
|
||
|
|
||
|
$wSkus = $db->get_all("select * from tb_goods_wg_order_skus where order_id = {$wgid}");
|
||
|
$list = array();
|
||
|
foreach($wSkus as $item) {
|
||
|
$list[$item['childOrderId']][] = $item;
|
||
|
}
|
||
|
|
||
|
?>
|
||
|
<div class="popup shxx">
|
||
|
<div class="content-block-title row" style="border-bottom:1px solid #E7E7E7"><div class="col-20"><a href="javascript:;" class="button button-success close-popup">关闭</a></div><div class="col-75 tips"> </div></div>
|
||
|
<div style="padding:10px; font-size:14px" class="list-block content-block ma-0">
|
||
|
<?
|
||
|
foreach($list as $orderId => $list2) {
|
||
|
$coInfo = $db->get_one("select * from tb_goods_wg_order_childs where childOrderId = '{$orderId}'");
|
||
|
$a = jd_get_order_track($orderId);
|
||
|
echo '<div style="color:#0000ff;font-weight:bold;font-size:15px">子订单:'.$orderId;
|
||
|
if($coInfo) {
|
||
|
$jdOrderState = $coInfo['jdOrderState'];
|
||
|
echo ' <span style="color:'.($jdOrderState==19?'#009900':'red').'">'.$jdStatusInfo[$jdOrderState]."</span>";
|
||
|
}
|
||
|
echo '</div>';
|
||
|
echo '<div style="border-bottom:1px solid #E7E7E7;color:#990000">';
|
||
|
foreach($list2 as $key => $item) {
|
||
|
//if($key != 0) echo '<br />';
|
||
|
//echo $item['name'];
|
||
|
echo '<img src="https://img13.360buyimg.com/n1/'.$item['imgUrl'].'" style="width:100px; height:100px;margin:0px;float:left" onclick="$.modal.prototype.defaults.closePrevious = false; $.toast(decodeURIComponent(\''.urlencode($item['name']).'\')); $.modal.prototype.defaults.closePrevious = true;" /> ';
|
||
|
}
|
||
|
echo '<div style="clear:both"></div></div>';
|
||
|
echo '<div style="border-bottom:3px solid #E7E7E7;">';
|
||
|
if($a['orderTrack']) {
|
||
|
for($i = count($a['orderTrack']) - 1; $i >= 0; $i--) {
|
||
|
$item = $a['orderTrack'][$i];
|
||
|
echo '<div';
|
||
|
if($i < count($a['orderTrack']) - 1) echo ' style="display:none"';
|
||
|
echo '>';
|
||
|
echo '<div style="color:#FF760E">'.$item['msgTime'].'</div>';
|
||
|
echo '<div style="'.($i!=0?'border-bottom:1px dashed #E7E7E7;':'').'">'.$item['content'].'</div>';
|
||
|
echo '</div>';
|
||
|
}
|
||
|
echo '<div style="text-align:center; padding:5px 0px"><a href="javascript:;" onclick="var p=this.parentNode.parentNode.childNodes; for(var i=0;i<p.length;i++) {p[i].style.display=\'\';}this.parentNode.style.display=\'none\';" style="font-size:17px">展开 <span class="icon icon-unfold"></span></a></div>';
|
||
|
} else {
|
||
|
echo '暂无物流信息';
|
||
|
}
|
||
|
echo '</div><br /><br />';
|
||
|
}
|
||
|
?>
|
||
|
</div>
|
||
|
</div>
|
||
|
<?
|
||
|
}
|
||
|
function jdLoginGetHTML() {
|
||
|
global $user;
|
||
|
?>
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
|
||
|
<title>wglogin</title>
|
||
|
<script type="text/javascript" src="/show/js/func.js"></script>
|
||
|
<script type="text/javascript">
|
||
|
function jdAlert(str, func) {
|
||
|
try {
|
||
|
if(func) window.parent.$.alert(str, func);
|
||
|
else window.parent.$.alert(str);
|
||
|
} catch (e) {
|
||
|
alert(str);
|
||
|
if(func) func();
|
||
|
}
|
||
|
}
|
||
|
function gotoPage(page) {
|
||
|
try {
|
||
|
window.parent.$.router.replacePage(page);
|
||
|
} catch (e) {
|
||
|
var url = "https://dc.fsecity.com/m/" + page;
|
||
|
try {
|
||
|
window.parent.location.href = url;
|
||
|
} catch (e) {
|
||
|
location.href = url;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function recvRs(rs) {
|
||
|
var ua = navigator.userAgent.toLowerCase();
|
||
|
var isios = false;
|
||
|
if(ua.indexOf("iphone") != -1 || ua.indexOf("ipad") != -1) isios = true;
|
||
|
if(rs.status != 1) {
|
||
|
jdAlert(rs.message, function() {
|
||
|
if(isios && typeof(iosJs) == 'undefined') {
|
||
|
window.parent.location.href = "ftdc://";
|
||
|
location.href = "ftdc://";
|
||
|
} else {
|
||
|
gotoPage("shop-index.html");
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
</head>
|
||
|
|
||
|
<body style="margin:0px;padding:0px">
|
||
|
|
||
|
<? } ?>
|