APP微信支付

  1. 首先控制器里写个方法,用pay来表示:
  2. case 'pay':
  3.         import('source.class.OrderPay');//调用orderPay.class文件
  4.         $order_pay = new OrderPay();// 实例化这个对象
  5.         $order_pay->pay();//调用pay这个方法
  6.         break;//结束
  7.  
  8. orderPay.class.php页面:
  9. <?php
  10. class OrderPay
  11. {
  12. //定义常量
  13.     public $is_wap;
  14.     public $order_no;
  15.     public $user;
  16.     public $shipping_method;
  17.     public $selffetch_id;
  18.     public $selffetch_name;
  19.     public $selffetch_phone;
  20.     public $selffetch_date;
  21.     public $selffetch_time;
  22.     public $friend_name;
  23.     public $friend_phone;
  24.     public $province;
  25.     public $city;
  26.     public $county;
  27.     public $friend_address;
  28.     public $friend_date;
  29.     public $friend_time;
  30.     public $send_other_number = 0;
  31.     public $send_other_per_number = 0;
  32.     public $send_other_hour = 0;
  33.     public $send_other_comment = '';
  34.     public $send_other_type;
  35.     public $address_id;
  36.     public $msg;
  37.     public $user_coupon_id;
  38.     public $postage_list;
  39.     public $payType;
  40.     public $is_app;
  41.     public $trade_no;
  42.     public $offline_payment = false;
  43.     public $pay_agent = 0;
  44.     public $peerpay_content;
  45.     public $peerpay_type;
  46.     public $order_data;
  47.     public $points_money_data;
  48.     public function __construct($config = array())
  49.     {
  50.         if (!(empty($config))) {
  51.             foreach ($config as $key => $value ) {
  52.                 $this->$key = $value;
  53.             }
  54.         }
  55.         if (empty($config['user'])) {
  56.             $this->user = $_SESSION['wap_user'];
  57.         }
  58.  
  59.         if (empty($config['is_wap'])) {
  60.             $this->is_wap = true;
  61.         }
  62.  
  63.         $this->trade_no = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  64.     }
  65.     public function pay($is_request = true)
  66.     {
  67.         $order = M('Order')->find($_POST['orderNo']);
  68.         $this->order = $order;
  69.         $nowOrder = $this->common($is_request);
  70.         if ($nowOrder['total'] <= 0) {
  71.             if (($this->payType == 'point') && (0 < $nowOrder['cash_point'])) {
  72.                 $pay_result = $this->pay_callback($nowOrder['trade_no'], 0, 'point', $nowOrder['trade_no'], array());
  73.                 if (!(empty($pay_result)) && (0 < $pay_result['err_code'])) {
  74.                     json_return(1000, $pay_result['err_msg']);
  75.                 }
  76.             }
  77.              else if ($order['is_point_order']) {
  78.                 GiftPoint::order($order['order_pay_point'], $order['order_id'], $order['store_id'], $order['uid']);
  79.             }
  80.              else {
  81.                 $pay_result = $this->pay_callback($nowOrder['trade_no'], 0, 'other', $nowOrder['trade_no'], array());
  82.                 if (!(empty($pay_result)) && (0 < $pay_result['err_code'])) {
  83.                     json_return(1000, $pay_result['err_msg']);
  84.                 }
  85.             }
  86.             if ($this->is_wap) {
  87.                 json_return(0, 'order.php?orderid=' . $nowOrder['order_id'], 'not_pay');
  88.             }
  89.              else {
  90.                 json_return(0, url('order:detail', array('order_id' => $nowOrder['order_no_txt'])));
  91.             }
  92.         }
  93.  
  94.         if (($this->payType == 'offline') && !($this->offline_payment)) {
  95.             json_return(1000, '对不起,订单不支付货到付款');
  96.         }
  97.          else if (($this->payType == 'offline') && $this->offline_payment) {
  98.             json_return(0, '/wap/order.php?orderid=' . $nowOrder['order_id']);
  99.         }
  100.          else if ($this->payType == 'peerpay') {
  101.             if ($this->pay_agent != '1') {
  102.                 json_return(1000, '您选择的支付方式不存在a<br/>请更新支付方式');
  103.             }
  104.              else {
  105.                 D('Order')->where(array('order_id' => $nowOrder['order_id']))->data(array('useStorePay' => 0))->save();
  106.                 json_return(0, '/wap/order_share.php?orderid=' . $this->order_no);
  107.             }
  108.         }
  109.  
  110.         $payMethodList = M('Config')->get_pay_method();
  111.         foreach ($payMethodList as $key_pay => $item_pay ) {
  112.             if ($item_pay['config']) {
  113.                 foreach ($item_pay['config'] as $key_config => $item_config ) {
  114.                     $count_arrs = explode(',', $item_config);
  115.                     $payMethodList[$key_pay]['config'][$key_config] = $count_arrs[0];
  116.                 }
  117.             }
  118.         }
  119.         if (empty($payMethodList[$this->payType])) {
  120.             json_return(1000, '您选择的支付方式不存在<br/>请更新支付方式');
  121.         }
  122.  
  123.         $nowOrder['order_no_txt'] = option('config.orderid_prefix') . $nowOrder['order_no'];
  124.         unset($_SESSION['float_amount']);
  125.         unset($_SESSION['float_postage']);
  126.         switch ($this->payType) {
  127.         case 'yeepay'://易宝支付
  128.             import('source.class.pay.Yeepay');
  129.             $payClass = new Yeepay($nowOrder, $payMethodList[$this->payType]['config'], $this->user);
  130.             $payInfo = $payClass->pay();
  131.             if ($payInfo['err_code']) {
  132.                 json_return(10000, $payInfo['err_msg']);
  133.             }
  134.              else {
  135.                 json_return(0, $payInfo['url']);
  136.             }
  137.             break;
  138.         case 'allinpay'://通联支付
  139.             $query_params = array('address_user' => $nowOrder['address_user'], 'product_name' => $nowOrder['product_name'], 'order_no' => $nowOrder['order_no'], 'total' => $nowOrder['total'], 'pro_num' => $nowOrder['pro_num'], 'pay_allinpay_merchantid' => $payMethodList[$this->payType]['config']['pay_allinpay_merchantid'], 'pay_allinpay_merchantkey' => $payMethodList[$this->payType]['config']['pay_allinpay_merchantkey'], 'nickname' => $this->user['nickname']);
  140.             $url_params = http_build_query($query_params);
  141.             $url = 'http://' . $_SERVER['HTTP_HOST'] . '/wap/allinpay.php?orderNo=' . $this->order_no . '&' . $url_params;
  142.             json_return(0, $url);
  143.             break;
  144.         case 'tenpay'://财付通支付
  145.             import('source.class.pay.Tenpay');
  146.             $payClass = new Tenpay($nowOrder, $payMethodList[$this->payType]['config'], $this->user);
  147.             $payInfo = $payClass->pay();
  148.             if ($payInfo['err_code']) {
  149.                 json_return(10000, $payInfo['err_msg']);
  150.             }
  151.              else {
  152.                 json_return(0, $payInfo['url']);
  153.             }
  154.             break;
  155.         case 'alipay'://支付宝支付
  156.             $is_app = $this->is_app;
  157.             if ($is_app == 'true') {
  158.                 $data = array();
  159.                 $data['body'] = $nowOrder['order_no_txt'];
  160.                 $data['out_trade_no'] = $nowOrder['trade_no'];
  161.                 $data['total_fee'] = $nowOrder['total'] * 100;
  162.                 $data['notify_url'] = option('config.wap_site_url') . '/paynotice.php';
  163.                 $data['attach'] = 'alipay';
  164.                 $data['return_url'] = option('config.wap_site_url') . '/order.php?orderno=' . option('config.orderid_prefix') . $nowOrder['order_no'];
  165.                 json_return(0, $data);
  166.             }
  167.  
  168.             $url = 'http://' . $_SERVER['HTTP_HOST'] . '/wap/alipay.php?orderNo=' . $this->order_no . '&payType=alipay';
  169.             json_return(0, $url);
  170.             break;
  171.       
  172. case 'weixin'://微信支付
     $is_app = $this->is_app;
  173.           
  174.             if ($is_app == true) {
  175.                 if($_POST['appType'] == 'wxapp'){
  176.                     import('source.class.wxapp');
             $payinfo['mchid'] = $now_store['mchid'];//商家商户号
                        $payinfo['order_no'] = $nowOrder['trade_no'];
                        $payinfo['body'] = $now_store['name'];
                        //$payinfo['openid'] = $_SESSION['wap_user']['openid'];
                        $payinfo['openid'] = $_POST['openid'];
                        $payinfo['appid'] = $storeWxapp['appid']?$storeWxapp['appid']:'wxabcd10a178d316be';
                        if ($nowOrder['is_eb'] == 1 && option('credit.ep_balance_open') == 1) {
                            $nowOrder['total'] = $nowOrder['eb_balace']>0?$nowOrder['total']-$nowOrder['eb_balace']:0;
                        }
                        //$payinfo['total_fee'] = 0.01;
                        $payinfo['total_fee'] = $nowOrder['total'];
                        $payinfo['pay_secret'] = $now_store['pay_secret'];
                        $payinfo['type'] = 'quickStart';
  177.                     $now_store = M('Store')->getStore($nowOrder['store_id'], true);
  178.                     $storeWxapp = D('Aaep_wxappinfo')->where(['store_id'=>$nowOrder['store_id']])->find();
  179.           
  180.                     $payClass = new Wxapp($payinfo);
  181.                     $payInfo = $payClass->pay();
  182.                     txtlog($payInfo['pay_data'],'log','wxapp');
  183.                     json_return(0, json_decode($payInfo['pay_data']));
  184.                 }else{
  185.                     import('source.class.weixin_app');
  186.                     $now_store = M('Store')->getStore($nowOrder['store_id'], true);
  187.                     if ($nowOrder['is_eb'] == 1 && option('credit.ep_balance_open') == 1) {
  188.                         $nowOrder['total'] = $nowOrder['eb_balace']>0?$nowOrder['total']-$nowOrder['eb_balace']:0;
  189.                     }
  190.                     // $nowOrder['total'] = 0.01;
  191.                     $appPay  = new weixin_app();
  192.                     $res     = $appPay->getPrePayOrder($now_store['name'],$nowOrder['trade_no'],$nowOrder['total']);
  193.                     json_return(0, $res);
  194.                 }
  195.             }
  196.  
  197.             if (option('config.store_pay_weixin_open')) {
  198.                 //file_put_contents(PIGCMS_PATH.'/INFO.TXT', json_encode($nowOrder));
  199.                 import('source.class.wxapp');
  200.                 $now_store = M('Store')->getStore($nowOrder['store_id'], true);
  201.                 //判断商家是否配置
  202.                 if($nowOrder['useStorePay'] && $now_store['mchid'] && $now_store['pay_secret']){
  203.                     $openid = $nowOrder['storeOpenid'];
  204.                 }else{
  205.                     json_return(10000, '商家未配置正确微信支付');
  206.                 }
  207.             }else {
  208.                 import('source.class.pay.Weixin');
  209.                 $openid = $_SESSION['openid'];
  210.             }
  211.             if($nowOrder['useStorePay']){
  212.                 $payinfo['mchid'] = $now_store['mchid'];//商家商户号
  213.                 $payinfo['order_no'] = $nowOrder['trade_no'];
  214.                 $payinfo['body'] = $now_store['name'];
  215.                 $payinfo['openid'] = $openid;
  216.                 $payinfo['appid'] = option('config.wechat_appid');
  217.                 if($now_store['appid']){
  218.                     $payinfo['appid'] = $now_store['appid'];
  219.                 }
  220.                 if ($nowOrder['is_eb'] == 1 && option('credit.ep_balance_open') == 1) {
  221.                     $nowOrder['total'] = $nowOrder['eb_balace']>0?$nowOrder['total']-$nowOrder['eb_balace']:0;
  222.                 }
  223.                 $payinfo['total_fee'] = $nowOrder['total'];
  224.                 $payinfo['pay_secret'] = $now_store['pay_secret'];
  225.                 //logs('请求参数',json_encode($payinfo));
  226.                 //logss('请求参数','openid',$payinfo);
  227.                 $payClass = new Wxapp($payinfo);
  228.             }else{
  229.                 logss('请求参数','openid',$payinfo);
  230.                 $payClass = new Weixin($nowOrder, $payMethodList[$this->payType]['config'], $this->user, $openid);
  231.             }
  232.  

  233.             //二维码支付

  234.  
  235.             if ($_GET['qrcode_pay']) {
  236.                 $url = $payClass->qrcodePay();
  237.                 if (!(is_string($url))) {
  238.                     json_return(1000, $url['err_msg']);
  239.                 }
  240.                 $url = option('Config.site_url') . '/source/qrcode.php?type=qrcodePay&id=0&url=' . urlencode($url);
  241.                 json_return(0, array($url));
  242.             } else {
  243.                 $payInfo = $payClass->pay();
  244.             }
  245.  

  246.             //公众号支付

  247.       

  248.      txtlog($payInfo,'支付请求','payInfo');
  249.             if ($payInfo['err_code']) {
  250.                 json_return(10000, $payInfo['err_msg']);
  251.             }else {
  252.                 json_return(0, json_decode($payInfo['pay_data']));
  253.             }
  254.             break;
  255.         }
  256.     }
  257.     public function eb_pay($is_request = true)
  258.     {
  259.         $order = M('Order')->find($_POST['orderNo']);
  260.         $this->order = $order;
  261.         if ($order['is_point_order']) {
  262.             $user = D('User')->where(array('uid' => $order['uid']))->find();
  263.             if ($user['point_gift'] < $order['order_pay_point']) {
  264.                 json_return(1000, '对不起,您的积分不够');
  265.             }
  266.         }
  267.  
  268.         $nowOrder = $this->common($is_request);
  269.         if ($nowOrder['total'] <= 0) {
  270.             if ($order['is_point_order']) {
  271.                 GiftPoint::order($order['order_pay_point'], $order['order_id'], $order['store_id'], $order['uid']);
  272.             }
  273.  
  274.             if ($this->is_wap) {
  275.                 json_return(0, 'order.php?orderid=' . $nowOrder['order_id'], 'not_pay');
  276.             }
  277.              else {
  278.                 json_return(0, url('order:detail', array('order_id' => $nowOrder['order_no_txt'])));
  279.             }
  280.         }
  281.         $data = array('pay_money' => $nowOrder['total'], 'trade_no' => $this->trade_no, 'pay_type' => 'eb_pay','orderNo'=>$nowOrder['order_no']);
  282.           dexit(array('error'=>0,'data'=>$data));
  283.     }
  284.     public function test($is_request = true)
  285.     {
  286.         $order = M('Order')->find($_POST['orderNo']);
  287.         $this->order = $order;
  288.         if ($order['is_point_order']) {
  289.             $user = D('User')->where(array('uid' => $order['uid']))->find();
  290.             if ($user['point_gift'] < $order['order_pay_point']) {
  291.                 json_return(1000, '对不起,您的积分不够');
  292.             }
  293.         }
  294.  
  295.         $nowOrder = $this->common($is_request);
  296.         if ($nowOrder['total'] <= 0) {
  297.             if ($order['is_point_order']) {
  298.                 GiftPoint::order($order['order_pay_point'], $order['order_id'], $order['store_id'], $order['uid']);
  299.             }
  300.  
  301.             if ($this->is_wap) {
  302.                 json_return(0, 'order.php?orderid=' . $nowOrder['order_id'], 'not_pay');
  303.             }
  304.              else {
  305.                 json_return(0, url('order:detail', array('order_id' => $nowOrder['order_no_txt'])));
  306.             }
  307.         }
  308.         if ($order['is_eb'] == 1 && option('credit.ep_balance_open')) {
  309.                 $nowOrder['total'] = $nowOrder['total'] - $nowOrder['eb_balace'];
  310.         }
  311.         $data = array('pay_money' => $nowOrder['total'], 'trade_no' => $this->trade_no, 'pay_type' => 'test','orderNo'=>$nowOrder['order_no']);
  312.           dexit(array('error'=>0,'data'=>$data));
  313.         import('source.class.Http');
  314.         $payment_url = option('config.wap_site_url') . '/paynotice.php';
  315.         $result = Http::curlPost($payment_url, $data);
  316.         ob_clean();
  317.         if (!(empty($result['errcode']))) {
  318.             json_return(1001, '支付失败');
  319.         }
  320.          else {
  321.             json_return(0, option('config.wap_site_url') . '/order.php?orderno=' . option('config.orderid_prefix') . $nowOrder['order_no']);
  322.         }
  323.     }
  324.     public function go_pay($is_request = true)
  325.     {
  326.         $order = M('Order')->find($_POST['orderNo']);
  327.         $this->order = $order;
  328.         if ($order['is_point_order']) {
  329.             $user = D('User')->where(array('uid' => $order['uid']))->find();
  330.             if ($user['point_gift'] < $order['order_pay_point']) {
  331.                 json_return(1000, '对不起,您的积分不够');
  332.             }
  333.         }
  334.  
  335.         $nowOrder = $this->common($is_request);
  336.         if ($nowOrder['total'] <= 0) {
  337.             if ($order['is_point_order']) {
  338.                 GiftPoint::order($order['order_pay_point'], $order['order_id'], $order['store_id'], $order['uid']);
  339.             }
  340.  
  341.             if ($this->is_wap) {
  342.                 json_return(0, 'order.php?orderid=' . $nowOrder['order_id'], 'not_pay');
  343.             }
  344.              else {
  345.                 json_return(0, url('order:detail', array('order_id' => $nowOrder['order_no_txt'])));
  346.             }
  347.         }
  348.  
  349.         $data = array('store_id' => $nowOrder['store_id'], 'token' => $_SESSION['wap_user']['token'], 'wecha_id' => $_SESSION['wap_user']['third_id'], 'orderName' => option('config.orderid_prefix') . $nowOrder['order_no'], 'orderid' => option('config.orderid_prefix') . $nowOrder['order_no'], 'price' => $nowOrder['total'], 'pro_num' => $nowOrder['pro_num'], 'trade_no' => $nowOrder['trade_no'], 'notOffline' => 1);
  350.         $salt = option('config.weidian_key');
  351.         $sort_data = $data;
  352.         $sort_data['salt'] = ((!(empty($salt)) ? $salt : 'pigcms'));
  353.         ksort($sort_data);
  354.         $sign_key = sha1(http_build_query($sort_data));
  355.         $data['sign_key'] = $sign_key;
  356.         $data['timestamp'] = time();
  357.         $store = M('Store');
  358.         $store = $store->getStore($nowOrder['store_id']);
  359.         $payment_url = $store['payment_url'];
  360.         $request_url = $payment_url;
  361.         $params = http_build_query($data);
  362.         $request_url .= '&' . $params;
  363.         json_return(0, $request_url);
  364.     }
  365.     public function pc_pay($is_request = true)
  366.     {
  367.         $payType = $_REQUEST['payType'];
  368.         if ($payType == 'offline') {
  369.             $nowOrder = M('Order')->find($_POST['orderNo']);
  370.             $store = M('Store')->getStore($nowOrder['store_id'], true);
  371.             $offline_payment = false;
  372.             if ($store['offline_payment']) {
  373.                 $offline_payment = true;
  374.             }
  375.  
  376.             foreach ($nowOrder['proList'] as $product ) {
  377.                 if ($product['wholesale_supplier_id'] != '0') {
  378.                     $offline_payment = false;
  379.                 }
  380.             }
  381.             if ($offline_payment == false) {
  382.                 json_return(1000, '不支持货到付款');
  383.             }
  384.  
  385.             $this->store = $store;
  386.             $this->order = $nowOrder;
  387.         }
  388.          else if ($payType == 'peerpay') {
  389.             if (empty($_POST['peerpay_content']) || empty($_POST['peerpay_type'])) {
  390.                 json_return(1000, '请填写代付信息');
  391.             }
  392.  
  393.             $nowOrder = M('Order')->find($_POST['orderNo']);
  394.             $store = M('Store')->getStore($nowOrder['store_id'], true);
  395.             if ($store['pay_agent'] != '1') {
  396.                 json_return(1000, '不支持代付');
  397.             }
  398.             $this->store = $store;
  399.             $this->order = $nowOrder;
  400.         }
  401.  
  402.         $order = $this->common(true);
  403.         if ($order['total'] <= 0) {
  404.             if (0 < $order['cash_point']) {
  405.                 $pay_result = $this->pay_callback($order['trade_no'], 0, 'point', $order['trade_no'], array());
  406.                 if (!(empty($pay_result)) && (0 < $pay_result['err_code'])) {
  407.                     json_return($pay_result['err_code'], $pay_result['err_msg']);
  408.                 }
  409.             }
  410.              else if ($order['is_point_order']) {
  411.                 GiftPoint::order($order['order_pay_point'], $order['order_id'], $order['store_id'], $order['uid']);
  412.             }
  413.              else {
  414.                 $pay_result = $this->pay_callback($order['trade_no'], 0, 'other', $order['trade_no'], array());
  415.                 if (!(empty($pay_result)) && (0 < $pay_result['err_code'])) {
  416.                     json_return($pay_result['err_code'], $pay_result['err_msg']);
  417.                 }
  418.             }
  419.             json_return(0, url('order:detail', array('order_id' => $order['order_no_txt'])));
  420.         }
  421.  
  422.         json_return(0, url('order:pay', array('order_id' => $order['order_no_txt'])));
  423.     }
  424.     public function pay_platform()
  425.     {
  426.         $pay_type = $_POST['pay_type'];
  427.         $order_no = $_POST['order_no'];
  428.         if (empty($order_no) || empty($pay_type)) {
  429.             json_return(1000, '缺少基本的参数');
  430.         }
  431.  
  432.         if (!(in_array($pay_type, array('platform_alipay', 'platform_weixin')))) {
  433.             json_return(1000, '参数错误');
  434.         }
  435.  
  436.         $platform_margin_log = D('Platform_margin_log')->where(array('order_no' => $order_no))->find();
  437.         if (empty($platform_margin_log) || ($platform_margin_log['type'] != '0')) {
  438.             json_return(1000, '平台保证金充值订单不存在');
  439.         }
  440.  
  441.         if ($platform_margin_log['status'] == '2') {
  442.             json_return(1000, '此平台保证金充值订单已支付');
  443.         }
  444.  
  445.         D('Platform_margin_log')->where(array('order_no' => $order_no))->data(array('trade_no' => $this->trade_no))->save();
  446.         switch ($pay_type) {
  447.         case 'platform_alipay':
  448.             $url = 'http://' . $_SERVER['HTTP_HOST'] . '/wap/alipay_platform.php?order_no=' . $order_no . '&payType=alipay';
  449.             json_return(0, $url);
  450.             break;
  451.         case 'platform_weixin':
  452.             import('source.class.pay.Weixin');
  453.             $order = array();
  454.             $order['order_no_txt'] = option('config.orderid_prefix') . $platform_margin_log['order_no'];
  455.             $order['trade_no'] = 'PMPAY' . $this->trade_no;
  456.             $order['total'] = $platform_margin_log['amount'];
  457.             $payment_methods_list = M('Config')->getPlatformPayMethod();
  458.             $payment_method = array();
  459.             $payment_method['pay_weixin_appid'] = $payment_methods_list[$pay_type]['config']['platform_weixin_appid'];
  460.             $payment_method['pay_weixin_mchid'] = $payment_methods_list[$pay_type]['config']['platform_weixin_mchid'];
  461.             $payment_method['pay_weixin_key'] = $payment_methods_list[$pay_type]['config']['platform_weixin_key'];
  462.             $payClass = new Weixin($order, $payment_method, $this->user, $_SESSION['platform_weixin_openid']);
  463.             if ($_GET['qrcode_pay']) {
  464.                 $url = $payClass->qrcodePay();
  465.                 if (!(is_string($url))) {
  466.                     json_return(1000, $url['err_msg']);
  467.                 }
  468.  
  469.                 $url = option('Config.site_url') . '/source/qrcode.php?type=qrcodePay&id=0&url=' . urlencode($url);
  470.                 json_return(0, array($url));
  471.             }
  472.              else {
  473.                 $payInfo = $payClass->pay();
  474.             }
  475.             if ($payInfo['err_code']) {
  476.                 json_return(10000, $payInfo['err_msg']);
  477.             }
  478.              else {
  479.                 json_return(0, json_decode($payInfo['pay_data']));
  480.             }
  481.             break;
  482.         }
  483.     }
  484.     private function common($is_request)
  485.     {
  486.         if ($is_request) {
  487.             $config = array();
  488.             $config['order_no'] = $_POST['orderNo'];
  489.             if (empty($this->user)) {
  490.                 $config['user'] = $_SESSION['wap_user'];
  491.             }
  492.  
  493.             $config['shipping_method'] = $_REQUEST['shipping_method'];
  494.             $config['selffetch_id'] = $_REQUEST['selffetch_id'];
  495.             $config['selffetch_name'] = $_REQUEST['selffetch_name'];
  496.             $config['selffetch_phone'] = $_REQUEST['selffetch_phone'];
  497.             $config['selffetch_date'] = $_REQUEST['selffetch_date'];
  498.             $config['selffetch_time'] = $_REQUEST['selffetch_time'];
  499.             $config['friend_name'] = $_REQUEST['friend_name'];
  500.             $config['friend_phone'] = $_REQUEST['friend_phone'];
  501.             $config['province'] = $_REQUEST['province'];
  502.             $config['city'] = $_REQUEST['city'];
  503.             $config['county'] = $_REQUEST['county'];
  504.             $config['friend_address'] = $_REQUEST['friend_address'];
  505.             $config['friend_date'] = $_REQUEST['friend_date'];
  506.             $config['friend_time'] = $_REQUEST['friend_time'];
  507.             $config['address_id'] = $_REQUEST['address_id'];
  508.             $config['msg'] = $_REQUEST['msg'];
  509.             $config['user_coupon_id'] = $_REQUEST['user_coupon_id'];
  510.             $config['postage_list'] = $_REQUEST['postage_list'];
  511.             $config['payType'] = $_REQUEST['payType'];
  512.             $config['is_app'] = $_REQUEST['is_app'];
  513.             $config['trade_no'] = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  514.             //$config['trade_no'] = $this->trade_no;
  515.             $config['send_other_number'] = $_REQUEST['send_other_number'];
  516.             $config['send_other_per_number'] = $_REQUEST['send_other_per_number'];
  517.             $config['send_other_hour'] = $_REQUEST['send_other_hour'];
  518.             $config['send_other_comment'] = $_REQUEST['send_other_comment'];
  519.             $config['send_other_type'] = $_REQUEST['send_other_type'];
  520.             $config['point'] = $_REQUEST['point'];
  521.             $config['point_money'] = $_REQUEST['point_money'];
  522.             $config['platform_point'] = $_REQUEST['platform_point'];
  523.             $config['platform_point_money'] = $_REQUEST['platform_point_money'];
  524.             $config['peerpay_content'] = $_REQUEST['peerpay_content'];
  525.             $config['peerpay_type'] = ((!(in_array($_REQUEST['peerpay_type'], array(1, 2))) ? 1 : $_REQUEST['peerpay_type']));
  526.             if (!(empty($config))) {
  527.                 foreach ($config as $key => $value ) {
  528.                     $this->$key = $value;
  529.                 }
  530.             }
  531.         }
  532.  
  533.         $user = D('User')->where(array('uid' => $this->user['uid']))->find();
  534.         if ($this->order) {
  535.             $nowOrder = $this->order;
  536.             unset($this->order);
  537.         }
  538.          else {
  539.             $nowOrder = M('Order')->find($this->order_no);
  540.         }
  541.         // dump($nowOrder);
  542.         // die;
  543.         if (empty($nowOrder['total'])) {
  544.             json_return(1000, '订单异常,请稍后再试');
  545.         }
  546.  
  547.         $trade_no = $this->trade_no;
  548.         if ((1 < $nowOrder['status']) && ($nowOrder['payment_method'] == 'codpay')) {
  549.             json_return(1008, './order.php?orderid=' . $nowOrder['order_id']);
  550.         }
  551.  
  552.         if (1 < $nowOrder['status']) {
  553.             json_return(1007, '该订单已支付或关闭<br/>不再允许付款');
  554.         }
  555.  
  556.         if ($this->is_wap == true) {
  557.             $store = M('Store')->getStore($nowOrder['store_id']);
  558.         }
  559.          else {
  560.             $store = $this->store;
  561.         }
  562.         $discount_total_money = 0;
  563.         $discount_total_check = false;
  564.         $type_ingore_arr = array(6, 7, 50, 55);
  565.         if (($nowOrder['is_point_order'] == 1) || in_array($nowOrder['type'], $type_ingore_arr)) {
  566.             $this->platform_point = 0;
  567.             $this->platform_point_money = 0;
  568.             $this->point = 0;
  569.             $this->point_money = 0;
  570.         }
  571.          else if (($nowOrder['status'] == 0) && option('credit.platform_credit_open') && ($this->platform_point == 0) && (0 < option('config.user_point_total')) && (option('config.user_point_total') < ($user['point_balance'] + $user['point_unbalance']))) {
  572.             $discount_total_money = $this->_discount($nowOrder['proList'], $store);
  573.             $discount_total_check = true;
  574.             $total = max(0, ($nowOrder['sub_total'] + $nowOrder['postage'] + $nowOrder['float_amount']) - $discount_total_money);
  575.             //dump($discount_total_money);die;
  576.             if (0 < $total) {
  577.                 json_return(1000, '您的积分过多,请使用全积分交易');
  578.             }
  579.         }
  580.          else if (($nowOrder['status'] == 1) && (0 < $nowOrder['total']) && option('credit.platform_credit_open') && (0 < option('config.user_point_total')) && (option('config.user_point_total') < ($user['point_balance'] + $user['point_unbalance']))) {
  581.             json_return(1000, '您的积分过多,暂停使用现金交易');
  582.         }
  583.  
  584.         foreach ($nowOrder['proList'] as $product ) {
  585.             $product_tmp = D('Product')->where('product_id = \'' . $product['product_id'] . '\'')->find();
  586.             if ($product_tmp['has_property'] == 0) {
  587.                 if ($product_tmp['quantity'] < $product['pro_num']) {
  588.                     json_return(1010, $product_tmp['name'] . '的库存不足');
  589.                     exit();
  590.                 }
  591.             }
  592.              else {
  593.                 $sku = D('Product_sku')->where(array('sku_id' => $product['sku_id']))->find();
  594.                 if ($sku['quantity'] < $product['pro_num']) {
  595.                     json_return(1010, $product['name'] . '的库存不足');
  596.                     exit();
  597.                 }
  598.             }
  599.             if ($product_tmp['buyer_quota']) {
  600.                 $buy_quantity = 0;
  601.                 $user_type = 'uid';
  602.                 $uid = $this->user['uid'];
  603.                 if (empty($this->user)) {
  604.                     $session_id = session_id();
  605.                     $uid = $session_id;
  606.                     $user_type = 'session';
  607.                     $cart_number = D('User_cart')->field('sum(pro_num) as pro_num')->where(array('product_id' => $product['product_id'], 'session_id' => $session_id))->find();
  608.                     if (!(empty($cart_number))) {
  609.                         $buy_quantity += $cart_number['pro_num'];
  610.                     }
  611.                 }
  612.                  else {
  613.                     $cart_number = D('User_cart')->field('sum(pro_num) as pro_num')->where(array('product_id' => $product['product_id'], 'uid' => $uid))->select();
  614.                     if (!(empty($cart_number))) {
  615.                         $buy_quantity += $cart_number['pro_num'];
  616.                     }
  617.                 }
  618.                 $buy_quantity += M('Order_product')->getBuyNumber($uid, $product_tmp['product_id'], $user_type);
  619.                 if ($product_tmp['buyer_quota'] < $buy_quantity) {
  620.                     json_return(1010, '您购买的产品:' . $product['name'] . '超出了限购');
  621.                 }
  622.             }
  623.         }
  624.         if ($store['offline_payment']) {
  625.             $this->offline_payment = true;
  626.         }
  627.  
  628.         $this->pay_agent = $store['pay_agent'];
  629.         if (empty($nowOrder['status'])) {
  630.             if (empty($nowOrder['order_id'])) {
  631.                 json_return(1008, '该订单不存在');
  632.             }
  633.  
  634.             $condition_order['order_id'] = $nowOrder['order_id'];
  635.             if ($this->user['uid']) {
  636.                 $condition_order['uid'] = $this->user['uid'];
  637.             }
  638.              else {
  639.                 $condition_order['session_id'] = session_id();
  640.             }
  641.             if ($this->shipping_method == 'selffetch') {
  642.                 $selffetch_id = $this->selffetch_id;
  643.                 $selffetch = array();
  644.                 if (strpos($selffetch_id, 'store')) {
  645.                     $store_contace = M('Store_contact')->get($nowOrder['store_id']);
  646.                     if (!(empty($store_contace))) {
  647.                         $selffetch['tel'] = (($store_contace['phone1'] ? $store_contace['phone1'] . '-' : '')) . $store_contace['phone2'];
  648.                         $selffetch['business_hours'] = '';
  649.                         $selffetch['name'] = $store['name'];
  650.                         $selffetch['physical_id'] = 0;
  651.                         $selffetch['store_id'] = $nowOrder['store_id'];
  652.                         $selffetch['province_txt'] = $store_contace['province_txt'];
  653.                         $selffetch['province'] = $store_contace['province'];
  654.                         $selffetch['city_txt'] = $store_contace['city_txt'];
  655.                         $selffetch['city'] = $store_contace['city'];
  656.                         $selffetch['county_txt'] = $store_contace['county_txt'];
  657.                         $selffetch['county'] = $store_contace['county'];
  658.                         $selffetch['address'] = $store_contace['address'];
  659.                         $selffetch['long'] = $store_contace['long'];
  660.                         $selffetch['lat'] = $store_contace['lat'];
  661.                     }
  662.                 }
  663.                  else {
  664.                     $selffetch = M('Store_physical')->getOne($selffetch_id);
  665.                     if (!(empty($selffetch)) && ($selffetch['store_id'] != $nowOrder['store_id'])) {
  666.                         $selffetch = '';
  667.                     }
  668.                      else if (!(empty($selffetch))) {
  669.                         $selffetch['tel'] = (($selffetch['phone1'] ? $selffetch['phone1'] . '-' : '')) . $selffetch['phone2'];
  670.                         $selffetch['physical_id'] = $selffetch_id;
  671.                         $selffetch['store_id'] = $nowOrder['store_id'];
  672.                     }
  673.                 }
  674.                 if (empty($selffetch)) {
  675.                     json_return(1009, '该门店不存在');
  676.                 }
  677.                 $data_order['postage'] = '0';
  678.                 $data_order['shipping_method'] = 'selffetch';
  679.                 $data_order['address_user'] = $this->selffetch_name;
  680.                 $data_order['address_tel'] = $this->selffetch_phone;
  681.                 $data_order['address'] = serialize(array('name' => $selffetch['name'], 'address' => $selffetch['address'], 'province' => $selffetch['province_txt'], 'province_code' => $selffetch['province'], 'city' => $selffetch['city_txt'], 'city_code' => $selffetch['city'], 'area' => $selffetch['county_txt'], 'area_code' => $selffetch['county'],'tel' => $selffetch['tel'], 'long' => $selffetch['long'], 'lat' => $selffetch['lat'], 'business_hours' => $selffetch['business_hours'], 'date' => $this->selffetch_date, 'time' => $this->selffetch_time, 'store_id' => $selffetch['store_id'], 'physical_id' => $selffetch['physical_id']));
  682.                 $nowOrder['postage'] = 0;
  683.                 $_POST['postage_list'] = '';
  684.             }
  685.              else if ($this->shipping_method == 'friend') {
  686.                 $friend_name = $this->friend_name;
  687.                 $friend_phone = $this->friend_phone;
  688.                 $province = $this->province;
  689.                 $city = $this->city;
  690.                 $county = $this->county;
  691.                 $friend_address = $this->friend_address;
  692.                 $friend_date = $this->friend_date;
  693.                 $friend_time = $this->friend_time;
  694.                 if (empty($friend_name)) {
  695.                     json_return(1009, '朋友姓名没有填写');
  696.                 }
  697.  
  698.                 if (!(preg_match('/\\d{9,13}$/', $friend_phone))) {
  699.                     json_return(1009, '请填写正确的手机号');
  700.                 }
  701.  
  702.                 if (empty($province)) {
  703.                     json_return(1009, '请选择省份');
  704.                 }
  705.  
  706.                 if (empty($city)) {
  707.                     json_return(1009, '请选择城市');
  708.                 }
  709.  
  710.                 if (empty($county)) {
  711.                     json_return(1009, '请选择区县');
  712.                 }
  713.  
  714.                 import('source.class.area');
  715.                 $area_class = new area();
  716.                 $province_txt = $area_class->get_name($province);
  717.                 $city_txt = $area_class->get_name($city);
  718.                 $county_txt = $area_class->get_name($county);
  719.                 if (empty($province_txt) || empty($city_txt)) {
  720.                     json_return(1009, '该地址不存在');
  721.                 }
  722.  
  723.                 $data_order['shipping_method'] = 'friend';
  724.                 $data_order['address_user'] = $friend_name;
  725.                 $data_order['address_tel'] = $friend_phone;
  726.                 $data_order['address'] = serialize(array('address' => $friend_address, 'province' => $province_txt, 'province_code' => $province, 'city' => $city_txt, 'city_code' => $city, 'area' => $county_txt, 'area_code' => $county, 'date' => $friend_date, 'time' => $friend_time));
  727.             }
  728.              else {
  729.                 if ($this->send_other_type == 2) {
  730.                     $top_store_id = (($store['top_supplier_id'] ? $store['top_supplier_id'] : $store['store_id']));
  731.                     $address = M('Commonweal_address')->getAdressById($top_store_id, $this->address_id);
  732.                 } else {
  733.                     $address = M('User_address')->getAdressById(session_id(), $this->user['uid'], $this->address_id);
  734.                 }
  735.                 if (empty($address)) {
  736.                     json_return(1009, '该地址不存在');
  737.                 }
  738.  
  739.                 if (($nowOrder['shipping_method'] == 'send_other') && ($this->shipping_method == 'send_other')) {
  740.                     $data_order['send_other_type'] = $this->send_other_type;
  741.                     $data_order['send_other_number'] = $this->send_other_number;
  742.                     $data_order['send_other_per_number'] = $this->send_other_per_number;
  743.                     if ($this->send_other_number == 1) {
  744.                         $data_order['send_other_per_number'] = $nowOrder['proList'][0]['pro_num'];
  745.                     }
  746.  
  747.                     $data_order['send_other_hour'] = $this->send_other_hour;
  748.                     $data_order['send_other_comment'] = $this->send_other_comment;
  749.                     $data_order['shipping_method'] = 'send_other';
  750.                 }
  751.                  else {
  752.                     $data_order['shipping_method'] = 'express';
  753.                 }
  754.                 $data_order['address_user'] = $address['name'];
  755.                 $data_order['address_tel'] = $address['tel'];
  756.                 $data_order['address'] = serialize(array('address' => $address['address'], 'province' => $address['province_txt'], 'province_code' => $address['province'], 'city' => $address['city_txt'], 'city_code' => $address['city'], 'area' => $address['area_txt'], 'area_code' => $address['area'],'lng'=>$address['lng'],'lat'=>$address['lat']));
  757.             }
  758.             if (option('credit.platform_credit_open') && empty($nowOrder['is_point_order'])) {
  759.                 if ($user['point_balance'] < $this->platform_point) {
  760.                     json_return(1000, '您的' . option('credit.platform_credit_name') . '不够');
  761.                 }
  762.  
  763.                 if (option('credit.force_use_platform_credit')) {
  764.                     Margin::init($nowOrder['store_id']);
  765.                     $margin_balance = Margin::balance();
  766.                     if ($margin_balance < (((($nowOrder['sub_total'] + $nowOrder['postage'] + $nowOrder['float_amount']) - $this->platform_point_money) * option('credit.credit_deposit_ratio')) / 100)) {
  767.                         Margin::check_balance(((($nowOrder['sub_total'] + $nowOrder['postage'] + $nowOrder['float_amount']) - $this->platform_point_money) * option('credit.credit_deposit_ratio')) / 100);
  768.                         json_return(1000, '店铺' . option('credit.platform_credit_name') . '的保证金不够');
  769.                     }
  770.                 }
  771.  
  772.                 if (0 && (0 < $this->platform_point)) {
  773.                     $max_platform_point = Margin::orderPoint($nowOrder['order_id']) + ($nowOrder['postage'] * option('credit.platform_credit_use_value'));
  774.                     if ($max_platform_point < $this->platform_point) {
  775.                         json_return(1000, '此订单最多只能使用' . $max_platform_point . '个' . option('credit.platform_credit_name'));
  776.                     }
  777.                 }
  778.  
  779.                 if ((0 < option('credit.online_trade_money')) && (0 < $this->platform_point)) {
  780.                     if (option('credit.platform_credit_use_value') == 0) {
  781.                         json_return(1000, '此订单不能使用' . option('credit.platform_credit_name'));
  782.                     }
  783.                      else {
  784.                         if ($discount_total_check == false) {
  785.                             $discount_total_money = $this->_discount($nowOrder['proList'], $store);
  786.                         }
  787.  
  788.                         $total = max(0, ($nowOrder['sub_total'] + $nowOrder['postage'] + $nowOrder['float_amount']) - $discount_total_money);
  789.                         $platform_point_money = $this->platform_point / option('credit.platform_credit_use_value');
  790.                         if ($platform_point_money < $total) {
  791.                             json_return(10000, '请使用' . ($total * option('credit.platform_credit_use_value')) . '个' . option('credit.platform_credit_name'));
  792.                         }
  793.  
  794.                         if ($platform_point_money != $this->platform_point_money) {
  795.                             json_return(10000, '数据不正确,即将刷新页面');
  796.                         }
  797.  
  798.                         if (0 && (round($total - $platform_point_money, 2) < round(($total * option('credit.online_trade_money')) / 100, 2))) {
  799.                             $max_platform_point = round(($total - (($total * option('credit.online_trade_money')) / 100)) * option('credit.platform_credit_use_value'), 2);
  800.                             json_return(1000, '此订单最多只能使用' . $max_platform_point . '个' . option('credit.platform_credit_name'));
  801.                         }
  802.                     }
  803.                 }
  804.             }
  805.              else {
  806.                 $this->platform_point = 0;
  807.                 $this->platform_point_money = 0;
  808.             }
  809.             $data_order['status'] = '1';
  810.             $data_order['comment'] = $this->msg;
  811.             $data_order['trade_no'] = $trade_no;
  812.             if (!(D('Order')->where($condition_order)->data($data_order)->save())) {
  813.                 json_return(1010, '订单信息保存失败');
  814.             }
  815.             $order_data = array();
  816.             if (!(in_array($nowOrder['type'], $type_ingore_arr))) {
  817.                 if (empty($this->order_data) && empty($nowOrder['is_point_order'])) {
  818.                     import('source.class.Order');
  819.                     $order_data = new Order($nowOrder['proList'], array('uid' => $this->user['uid']));
  820.                     $order_data = $order_data->all();
  821.                 }
  822.                  else {
  823.                     $order_data = $this->order_data;
  824.                 }
  825.             }
  826.  
  827.             $product_id_arr = array();
  828.             $discount_money = 0;
  829.             $product_price_arr = array();
  830.             $supplier_money = 0;
  831.             $first_product_name = '';
  832.             foreach ($nowOrder['proList'] as $product ) {
  833.                 if (!($first_product_name)) {
  834.                     $first_product_name = msubstr($product[name], 0, 11);
  835.                 }
  836.  
  837.                 $discount = 10;
  838.                 if (!(in_array($nowOrder['type'], $type_ingore_arr))) {
  839.                     if ($product['wholesale_supplier_id']) {
  840.                         $discount = $order_data['discount_list'][$product['wholesale_supplier_id']];
  841.                         $product_price_arr[$product['wholesale_supplier_id']] += $product['pro_price'] * $product['pro_num'];
  842.                     }
  843.                      else {
  844.                         $discount = $order_data['discount_list'][$product['store_id']];
  845.                         $product_price_arr[$product['store_id']] += $product['pro_price'] * $product['pro_num'];
  846.                     }
  847.                     if ((0 < $product['discount']) && ($product['discount'] <= 10)) {
  848.                         $discount = $product['discount'];
  849.                     }
  850.                 }
  851.  
  852.                 if (($discount != 10) && (0 < $discount)) {
  853.                     $discount_money += ($product['pro_num'] * $product['pro_price'] * (10 - $discount)) / 10;
  854.                     if (empty($product['wholesale_supplier_id'])) {
  855.                         $supplier_money += ($product['pro_num'] * $product['pro_price'] * $discount) / 10;
  856.                     }
  857.                 }
  858.                  else if (empty($product['wholesale_supplier_id'])) {
  859.                     $supplier_money += $product['pro_num'] * $product['pro_price'];
  860.                 }
  861.  
  862.                 if ($product['wholesale_supplier_id'] != '0') {
  863.                     $offline_payment = false;
  864.                 }
  865.  
  866.                 $product_id_arr[] = $product['product_id'];
  867.             }
  868.             $money = 0;
  869.             $pro_num = 0;
  870.             $pro_count = 0;
  871.             $supplier_reward_money = 0;
  872.             $supplier_coupon_money = 0;
  873.             if ($this->user['uid'] && empty($nowOrder['is_point_order'])) {
  874.                 if (isset($order_data['reward_list']) && is_array($order_data['reward_list'])) {
  875.                     foreach ($order_data['reward_list'] as $tmp_store_id => $reward_list ) {
  876.                         foreach ($reward_list as $key => $reward ) {
  877.                             if ($key === 'product_price_list') {
  878.                                 continue;
  879.                             }
  880.  
  881.                             if (($store['store_id'] == $tmp_store_id) || ($store['top_supplier_id'] == $tmp_store_id)) {
  882.                                 $supplier_reward_money += $reward['cash'];
  883.                             }
  884.  
  885.                             if (0 < $reward['score']) {
  886.                                 $data_point_record = array('uid' => $this->user['uid'], 'store_id' => $tmp_store_id, 'points' => $reward['score'], 'order_id' => $nowOrder['order_id'], 'is_call_to_fans' => 0, 'type' => '5', 'is_available' => 0, 'timestamp' => time());
  887.                             }
  888.  
  889.                             if (is_array($reward['present']) && (0 < count($reward['present']))) {
  890.                                 foreach ($reward['present'] as $present ) {
  891.                                     $data_order_product = array();
  892.                                     $data_order_product['order_id'] = $nowOrder['order_id'];
  893.                                     $data_order_product['product_id'] = $present['product_id'];
  894.                                     if ($present['has_property']) {
  895.                                         $sku_arr = M('Product_sku')->getRandSku($present['product_id']);
  896.                                         $data_order_product['sku_id'] = $sku_arr['sku_id'];
  897.                                         $data_order_product['sku_data'] = $sku_arr['propertiey'];
  898.                                     }
  899.  
  900.                                     $data_order_product['pro_num'] = 1;
  901.                                     $data_order_product['pro_price'] = 0;
  902.                                     $data_order_product['is_present'] = 1;
  903.                                     ++$pro_num;
  904.                                     if (!(in_array($present['product_id'], $product_id_arr))) {
  905.                                         ++$pro_count;
  906.                                     }
  907.  
  908.                                     D('Order_product')->data($data_order_product)->add();
  909.                                     unset($data_order_product);
  910.                                 }
  911.                             }
  912.  
  913.                             if ($reward['coupon']) {
  914.                                 $data_user_coupon = array();
  915.                                 $data_user_coupon['uid'] = $this->user['uid'];
  916.                                 $data_user_coupon['store_id'] = $reward['coupon']['store_id'];
  917.                                 $data_user_coupon['coupon_id'] = $reward['coupon']['id'];
  918.                                 $data_user_coupon['card_no'] = String::keyGen();
  919.                                 $data_user_coupon['cname'] = $reward['coupon']['name'];
  920.                                 $data_user_coupon['face_money'] = $reward['coupon']['face_money'];
  921.                                 $data_user_coupon['limit_money'] = $reward['coupon']['limit_money'];
  922.                                 $data_user_coupon['start_time'] = $reward['coupon']['start_time'];
  923.                                 $data_user_coupon['end_time'] = $reward['coupon']['end_time'];
  924.                                 $data_user_coupon['is_expire_notice'] = $reward['coupon']['is_expire_notice'];
  925.                                 $data_user_coupon['is_share'] = $reward['coupon']['is_share'];
  926.                                 $data_user_coupon['is_all_product'] = $reward['coupon']['is_all_product'];
  927.                                 $data_user_coupon['is_original_price'] = $reward['coupon']['is_original_price'];
  928.                                 $data_user_coupon['description'] = $reward['coupon']['description'];
  929.                                 $data_user_coupon['timestamp'] = time();
  930.                                 $data_user_coupon['type'] = 2;
  931.                                 $data_user_coupon['give_order_id'] = $nowOrder['order_id'];
  932.                                 D('User_coupon')->data($data_user_coupon)->add();
  933.                             }
  934.  
  935.                             $reward['store_id'] = $tmp_store_id;
  936.                             $data = array();
  937.                             $data['order_id'] = $nowOrder['order_id'];
  938.                             $data['uid'] = $this->user['uid'];
  939.                             $data['rid'] = $reward['rid'];
  940.                             $data['name'] = $reward['name'];
  941.                             $data['content'] = serialize($reward);
  942.                             $money += $reward['cash'];
  943.                             D('Order_reward')->data($data)->add();
  944.                         }
  945.                     }
  946.                 }
  947.  
  948.                 $coupon_id = $this->user_coupon_id;
  949.                 if (isset($order_data['user_coupon_list']) && is_array($order_data['user_coupon_list'])) {
  950.                     foreach ($order_data['user_coupon_list'] as $tmp_store_id => $user_coupon_list ) {
  951.                         foreach ($user_coupon_list as $user_coupon ) {
  952.                             while (in_array($user_coupon['id'], $coupon_id)) {
  953.                                 $data = array();
  954.                                 $data['order_id'] = $nowOrder['order_id'];
  955.                                 $data['uid'] = $this->user['uid'];
  956.                                 $data['store_id'] = $tmp_store_id;
  957.                                 $data['coupon_id'] = $user_coupon['coupon_id'];
  958.                                 $data['name'] = $user_coupon['cname'];
  959.                                 $data['user_coupon_id'] = $user_coupon['id'];
  960.                                 $data['money'] = $user_coupon['face_money'];
  961.                                 $money += $user_coupon['face_money'];
  962.                                 D('Order_coupon')->data($data)->add();
  963.                                 if (($store['store_id'] == $tmp_store_id) || ($store['top_supplier_id'] == $tmp_store_id)) {
  964.                                     $supplier_coupon_money += $reward['cash'];
  965.                                 }
  966.  
  967.                                 $data = array();
  968.                                 $data['is_use'] = 1;
  969.                                 $data['use_time'] = time();
  970.                                 $data['use_order_id'] = $nowOrder['order_id'];
  971.                                 D('User_coupon')->where(array('id' => $user_coupon['id']))->data($data)->save();
  972.                                 break;
  973.                             }
  974.                         }
  975.                     }
  976.                 }
  977.             }
  978.  
  979.             if (isset($order_data['discount_list']) && empty($nowOrder['is_point_order'])) {
  980.                 $postage_free_list = $order_data['postage_free_list'];
  981.                 $postage_list = $this->postage_list;
  982.                 if (!(empty($postage_list))) {
  983.                     $postage_list = unserialize($postage_list);
  984.                 }
  985.  
  986.                 foreach ($order_data['discount_list'] as $tmp_store_id => $discount ) {
  987.                     if ((($discount != 0) && ($discount != 10)) || !(empty($postage_free_list[$tmp_store_id]))) {
  988.                         $order_discount_data = array();
  989.                         $order_discount_data['order_id'] = $nowOrder['order_id'];
  990.                         $order_discount_data['uid'] = $this->user['uid'];
  991.                         $order_discount_data['store_id'] = $tmp_store_id;
  992.                         $order_discount_data['discount'] = $discount;
  993.                         $order_discount_data['is_postage_free'] = $postage_free_list[$tmp_store_id];
  994.                         $order_discount_data['postage_money'] = 0;
  995.                         if (isset($postage_list[$tmp_store_id])) {
  996.                             $order_discount_data['postage_money'] = $postage_list[$tmp_store_id];
  997.                         }
  998.  
  999.                         D('Order_discount')->data($order_discount_data)->add();
  1000.                     }
  1001.                 }
  1002.             }
  1003.  
  1004.             $top_supplier_id = (($store['root_supplier_id'] ? $store['root_supplier_id'] : $store['store_id']));
  1005.             $point_money = 0;
  1006.             if (!(in_array($nowOrder['type'], $type_ingore_arr)) && $this->point && $this->point_money) {
  1007.                 $postage_list = $this->postage_list;
  1008.                 if (!(empty($postage_list))) {
  1009.                     $postage_list = unserialize($postage_list);
  1010.                 }
  1011.  
  1012.                 if (!(empty($this->points_money_data))) {
  1013.                     $points_money_data = $this->points_money_data;
  1014.                 }
  1015.                  else {
  1016.                     $points_money_data = Points::getPointMoney($this->user['uid'], $top_supplier_id, ($supplier_money - $supplier_reward_money - $supplier_coupon_money) + $postage_list[$top_supplier_id]);
  1017.                 }
  1018.                 if ($points_money_data['money'] || $points_money_data['point']) {
  1019.                     $point_money = $points_money_data['money'];
  1020.                     $data = array();
  1021.                     $data['dateline'] = $_SERVER['REQUEST_TIME'];
  1022.                     $data['order_id'] = $nowOrder['order_id'];
  1023.                     $data['store_id'] = $top_supplier_id;
  1024.                     $data['uid'] = $this->user['uid'];
  1025.                     $data['money'] = $points_money_data['money'];
  1026.                     $data['point'] = $points_money_data['point'];
  1027.                     if (D('Order_point')->data($data)->add()) {
  1028.                         $data = array();
  1029.                         $data['uid'] = $this->user['uid'];
  1030.                         $data['store_id'] = $top_supplier_id;
  1031.                         $data['order_id'] = $nowOrder['order_id'];
  1032.                         $data['points'] = -1 * $points_money_data['point'];
  1033.                         $data['type'] = 9;
  1034.                         $data['is_available'] = 1;
  1035.                         $data['timestamp'] = $_SERVER['REQUEST_TIME'];
  1036.                         if (D('User_points')->data($data)->add()) {
  1037.                             D('Store_user_data')->where(array('uid' => $this->user['uid'], 'store_id' => $top_supplier_id))->setDec('point', $points_money_data['point']);
  1038.                         }
  1039.                     }
  1040.                 }
  1041.             }
  1042.  
  1043.             if (in_array($nowOrder['type'], $type_ingore_arr)) {
  1044.                 $this->platform_point = 0;
  1045.                 $this->platform_point_money = 0;
  1046.                 $money = 0;
  1047.                 $discount_money = 0;
  1048.                 $points_money_data['money'] = 0;
  1049.             }
  1050.  
  1051.             $total = max(0, ($nowOrder['sub_total'] + $nowOrder['postage'] + $nowOrder['float_amount']) - $money - $discount_money - $points_money_data['money'] - $this->platform_point_money);
  1052.             if ($nowOrder['type'] == 7) {
  1053.                 if ($nowOrder['order_id'] == $nowOrder['presale_order_id']) {
  1054.                     $total = $total - $nowOrder['data_money'];
  1055.                 }
  1056.             }
  1057.  
  1058.             $pro_count = $nowOrder['pro_count'] + $pro_count;
  1059.             $pro_num = $nowOrder['pro_num'] + $pro_num;
  1060.             $data = array();
  1061.             $data['total'] = $total;
  1062.             $data['pro_count'] = $pro_count;
  1063.             $data['pro_num'] = $pro_num;
  1064.             $data['cash_point'] = $this->platform_point;
  1065.             $data['point2money_rate'] = option('credit.platform_credit_use_value');
  1066.             $data['status'] = 1;
  1067.             if (($this->payType == 'offline') && $this->offline_payment) {
  1068.                 $data['status'] = 2;
  1069.                 $data['payment_method'] = 'codpay';
  1070.             }
  1071.              else if ($this->payType == 'peerpay') {
  1072.                 $data['payment_method'] = 'peerpay';
  1073.                 if ($this->is_wap == false) {
  1074.                     $data['peerpay_content'] = $this->peerpay_content;
  1075.                     $data['peerpay_type'] = $this->peerpay_type;
  1076.                 }
  1077.             }
  1078.  
  1079.             if ($this->platform_point) {
  1080.                 Margin::user_point_log($this->user['uid'], $nowOrder['order_id'], $nowOrder['store_id'], $this->platform_point * -1, 1, 1, '订单使用', $nowOrder['is_offline'], '', false, true);
  1081.             }
  1082.             D('Order')->where(array('order_id' => $nowOrder['order_id']))->data($data)->save();
  1083.             $nowOrder['total'] = $total;
  1084.             $nowOrder['cash_point'] = $this->platform_point;
  1085.         }else {
  1086.             foreach ($nowOrder['proList'] as $product ) {
  1087.                 while ($product['source_product_id'] != '0') {
  1088.                     $this->offline_payment = false;
  1089.                     break;
  1090.                 }
  1091.             }
  1092.             $data_order = array();
  1093.             if (($this->payType == 'offline') && $this->offline_payment) {
  1094.                 $data_order['status'] = 2;
  1095.                 $data_order['payment_method'] = 'codpay';
  1096.             }
  1097.              else if ($this->payType == 'peerpay') {
  1098.                 $data_order['payment_method'] = 'peerpay';
  1099.             }
  1100.  
  1101.             $condition_order['order_id'] = $nowOrder['order_id'];
  1102.             $data_order['trade_no'] = $trade_no;
  1103.             $data_order['send_other_comment'] = $this->send_other_comment;
  1104.             if (!(D('Order')->where($condition_order)->data($data_order)->save())) {
  1105.                 json_return(1010, '订单信息保存失败');
  1106.             }
  1107.         }
  1108.         $nowOrder['trade_no'] = $trade_no;
  1109.         if (($nowOrder['total'] <= 0) && ($nowOrder['cash_point'] == 0)) {
  1110.             D('Order')->where(array('order_id' => $nowOrder['order_id']))->data(array('status' => 2, 'paid_time' => time()))->save();
  1111.             M('User_coupon')->save(array('is_valid' => 1), array('give_order_id' => $nowOrder['order_id']));
  1112.             $database_product = D('Product');
  1113.             $database_product_sku = D('Product_sku');
  1114.             foreach ($nowOrder['proList'] as $value ) {
  1115.                 if ($value['sku_id']) {
  1116.                     $condition_product_sku['sku_id'] = $value['sku_id'];
  1117.                     $database_product_sku->where($condition_product_sku)->setInc('sales', $value['pro_num']);
  1118.                     $database_product_sku->where($condition_product_sku)->setDec('quantity', $value['pro_num']);
  1119.                 }
  1120.                 $condition_product['product_id'] = $value['product_id'];
  1121.                 $database_product->where($condition_product)->setInc('sales', $value['pro_num']);
  1122.                 $database_product->where($condition_product)->setDec('quantity', $value['pro_num']);
  1123.             }
  1124.         }
  1125.         /*if(D('Order')->where(array('order_id' => $nowOrder['order_id']))->data(array('trade_no'=>$trade_no))->save()){
  1126.             $Order = D('Order')->where(array('order_id' => $nowOrder['order_id']))->find();
  1127.             logs('修改后',$Order['trade_no']);
  1128.             $nowOrder['trade_no'] = $Order['trade_no'];
  1129.         }*/
  1130.         return $nowOrder;
  1131.     }
  1132.     private function _discount($product_list, $store)
  1133.     {
  1134.         import('source.class.Order');
  1135.         $order_data = new Order($product_list, array('uid' => $this->user['uid']));
  1136.         $order_data = $order_data->all();
  1137.         $this->order_data = $order_data;
  1138.         $discount_money = 0;
  1139.         $supplier_money = 0;
  1140.         foreach ($product_list as $product ) {
  1141.             $discount = 10;
  1142.             if ($product['wholesale_supplier_id']) {
  1143.                 $discount = $order_data['discount_list'][$product['wholesale_supplier_id']];
  1144.             }
  1145.              else {
  1146.                 $discount = $order_data['discount_list'][$product['store_id']];
  1147.             }
  1148.             if ((0 < $product['discount']) && ($product['discount'] <= 10)) {
  1149.                 $discount = $product['discount'];
  1150.             }
  1151.  
  1152.             if (($discount != 10) && (0 < $discount)) {
  1153.                 $discount_money += ($product['pro_num'] * $product['pro_price'] * (10 - $discount)) / 10;
  1154.                 if (empty($product['wholesale_supplier_id'])) {
  1155.                     $supplier_money += ($product['pro_num'] * $product['pro_price'] * $discount) / 10;
  1156.                 }
  1157.             }
  1158.              else if (empty($product['wholesale_supplier_id'])) {
  1159.                 $supplier_money += $product['pro_num'] * $product['pro_price'];
  1160.             }
  1161.         }
  1162.         $money = 0;
  1163.         $supplier_reward_money = 0;
  1164.         $supplier_coupon_money = 0;
  1165.         if ($this->user['uid']) {
  1166.             if (isset($order_data['reward_list']) && is_array($order_data['reward_list'])) {
  1167.                 foreach ($order_data['reward_list'] as $tmp_store_id => $reward_list ) {
  1168.                     foreach ($reward_list as $key => $reward ) {
  1169.                         if ($key === 'product_price_list') {
  1170.                             continue;
  1171.                         }
  1172.  
  1173.                         if (($store['store_id'] == $tmp_store_id) || ($store['top_supplier_id'] == $tmp_store_id)) {
  1174.                             $supplier_reward_money += $reward['cash'];
  1175.                         }
  1176.  
  1177.                         $money += $reward['cash'];
  1178.                     }
  1179.                 }
  1180.             }
  1181.  
  1182.             $coupon_id = $this->user_coupon_id;
  1183.             if (isset($order_data['user_coupon_list']) && is_array($order_data['user_coupon_list'])) {
  1184.                 foreach ($order_data['user_coupon_list'] as $tmp_store_id => $user_coupon_list ) {
  1185.                     foreach ($user_coupon_list as $user_coupon ) {
  1186.                         while (in_array($user_coupon['id'], $coupon_id)) {
  1187.                             $money += $user_coupon['face_money'];
  1188.                             if (($store['store_id'] == $tmp_store_id) || ($store['top_supplier_id'] == $tmp_store_id)) {
  1189.                                 $supplier_coupon_money += $reward['cash'];
  1190.                             }
  1191.  
  1192.                             break;
  1193.                         }
  1194.                     }
  1195.                 }
  1196.             }
  1197.         }
  1198.  
  1199.         $top_supplier_id = (($store['top_supplier_id'] ? $store['top_supplier_id'] : $store['store_id']));
  1200.         $point_money = 0;
  1201.         if ($this->point && $this->point_money) {
  1202.             $postage_list = $this->postage_list;
  1203.             if (!(empty($postage_list))) {
  1204.                 $postage_list = unserialize($postage_list);
  1205.             }
  1206.  
  1207.             $points_money_data = Points::getPointMoney($this->user['uid'], $top_supplier_id, ($supplier_money - $supplier_reward_money - $supplier_coupon_money) + $postage_list[$top_supplier_id]);
  1208.             if ($points_money_data['money']) {
  1209.                 $point_money = $points_money_data['money'];
  1210.             }
  1211.  
  1212.             $this->points_money_data = $points_money_data;
  1213.         }
  1214.  
  1215.         return $discount_money + $money + $point_money;
  1216.     }
  1217.     public function pay_callback($trade_no, $pay_money, $payment_method, $out_trade_no, $trade_data = array())
  1218.     {
  1219.         // file_put_contents('./jeje.txt', 'data');
  1220.         import('source.class.Points');
  1221.         import('source.class.Margin');
  1222.         import('source.class.Order');
  1223.         import('source.class.Notice');
  1224.         import('source.class.GiftPoint');
  1225.         import('source.class.EbNotic');
  1226.         //import('source.class.wx_message');
  1227.         import('source.class.Epapi');
  1228.         if (empty($trade_no)) {
  1229.             return array('err_code' => 1000, 'err_msg' => '内部交易单号为空');
  1230.         }
  1231.         if (!(is_numeric($pay_money)) || ($pay_money < 0)) {
  1232.             return array('err_code' => 1001, 'err_msg' => '实付金额无效');
  1233.         }
  1234.         if (empty($payment_method)) {
  1235.             return array('err_code' => 1002, 'err_msg' => '未选择支付方式');
  1236.         }
  1237.         if ($payment_method != 'peerpay') {
  1238.             $check_payment_method = M('Order')->getPaymentMethod($payment_method);
  1239.             if (empty($check_payment_method) || is_array($check_payment_method)) {
  1240.                 return array('err_code' => 1003, 'err_msg' => '无效的支付方式');
  1241.             }
  1242.         }
  1243.         if (empty($out_trade_no)) {
  1244.             return array('err_code' => 1005, 'err_msg' => '支付流水号为空');
  1245.         }
  1246.         $data_order = array();
  1247.         $where = array();
  1248.         if (strpos($trade_no, '_')) {
  1249.             $order_no_arr = explode('_', $trade_no);
  1250.             $order_no = $order_no_arr[0];
  1251.             $trade_no = $order_no_arr[1];
  1252.             $data_order['trade_no'] = $trade_no;
  1253.             $where['order_no'] = $order_no;
  1254.         }
  1255.          else {
  1256.             $where['trade_no'] = $trade_no;
  1257.         }
  1258.         $nowOrder = D('Order')->where($where)->find();
  1259.         if (empty($nowOrder)) {
  1260.             return array('err_code' => 1006, 'err_msg' => '订单不存在');
  1261.         }
  1262.  
  1263.         if ($nowOrder['status'] == 0) {
  1264.             return array('err_code' => 1007, 'err_msg' => '临时订单无法支付');
  1265.         }
  1266.  
  1267.         if ($nowOrder['status'] == 5) {
  1268.             return array('err_code' => 1008, 'err_msg' => '订单已取消');
  1269.         }
  1270.  
  1271.         if (1 < $nowOrder['status']) {
  1272.             return array('err_code' => 0, 'err_msg' => '订单已支付');
  1273.         }
  1274.  
  1275.         $nowStore = D('Store')->field('`store_id`,`uid`,`name`,`income`,`unbalance`,`drp_level`,`drp_supplier_id`,`root_supplier_id`,`store_pay_income`,`drp_degree_id`,`sales`,`orders`,`drp_team_id`')->where(array('store_id' => $nowOrder['store_id']))->find();
  1276.         if (empty($nowStore)) {
  1277.             return array('err_code' => 1009, 'err_msg' => '店铺不存在');
  1278.         }
  1279.  
  1280.         $cash_point_money = 0;
  1281.         if (0 < $nowOrder['cash_point']) {
  1282.             $cash_point_money = $nowOrder['cash_point'] / $nowOrder['point2money_rate'];
  1283.         }
  1284.         //$userinfo = D('User')->field('phone')->where(['uid'=>$nowOrder['uid']])->find();
  1285.         //txtlog($userinfo);
  1286.         //$userstore = D('User')->field('smscount')->where(['uid'=>$nowStore['uid']])->find();
  1287.         //file_put_contents(PIGCMS_PATH.'/upload/aa1.txt',$nowStore['name']);
  1288.         // dump($userstore);
  1289.         // die;
  1290.         //是否有订单支付完成发送短信的权限
  1291.         /*$store_notice_manager = M('Store_system_notice_manage')->get($nowOrder['store_id']);
  1292.         $has_power = $store_notice_manager['has_power'];
  1293.         $has_power_arr = explode('|', $has_power);
  1294.         $arr = [];
  1295.         foreach($has_power_arr as $k=>$v){
  1296.             list($a,$b) = @explode('^',$v);
  1297.             $arr[$a] = $b;
  1298.         }*/
  1299.         //if(in_array(1, array_keys($arr)) && strpos($arr[1],'1')===0){
  1300.             /*拥有发送的权限判断短信条数*/
  1301.             //if($userstore['smscount']>0){
  1302.                 /*订单支付成功之后发送短信模板*/
  1303.                 //file_put_contents(PIGCMS_PATH.'/upload/aa.txt','lalallala');
  1304.                /* import('Alimessage');
  1305.                 $pay_return = new Alimessage();
  1306.                 $res = $pay_return->order_pay_success('SMS_109160011',$nowStore['name'],$nowOrder['order_no'],$userinfo['phone']);
  1307.                 if($res){
  1308.                     //短信发送成功,余数更改
  1309.                     $left_count = $userstore['smscount'] - 1;
  1310.                     $result = D('User')->where(['uid'=>$nowStore['uid']])->data(['smscount'=>$left_count])->save();*/
  1311.                     // if($result){
  1312.                     //     echo 'success';
  1313.                     // }else{
  1314.                     //     echo 'fail';
  1315.                     // }
  1316.                 //}
  1317.             //}
  1318.         //}
  1319.         //商家订单提醒
  1320.         $Epapi = new Epapi(['appid'=>option('config.wechat_appid'),'appsecret'=>option('config.wechat_appsecret')]);
  1321.         $res = $Epapi->payment_success($nowOrder['order_no'],$payment_method);
  1322.         //E币混合支付
  1323.         if($nowOrder['is_eb'] == 1 && option('credit.ep_balance_open')){
  1324.             EbNotic::EditEb($nowOrder);
  1325.             $cash_point_money = $nowOrder['eb_balace'];
  1326.         }
  1327.         $order_total = $pay_money + $cash_point_money;
  1328.         $data_order['third_id'] = $out_trade_no;
  1329.         $data_order['payment_method'] = $payment_method;
  1330.         $data_order['pay_money'] = $pay_money;
  1331.         $data_order['paid_time'] = $_SERVER['REQUEST_TIME'];
  1332.         $data_order['total'] = $order_total;
  1333.         if (empty($nowOrder['is_fx']) && empty($nowOrder['user_order_id'])) {
  1334.             $data_order['sale_total'] = $order_total;
  1335.         }
  1336.  
  1337.         if (empty($nowOrder['presale_order_id']) && ($nowOrder['type'] == 7)) {
  1338.             $data_order['status'] = 7;
  1339.         }else {
  1340.             $data_order['status'] = 2;
  1341.         }
  1342.         //扫描直接支付
  1343.         if ($nowOrder['is_offline'] == 1) {
  1344.             $data_order['status'] = 7;
  1345.             $data_order['sent_time'] = time();
  1346.             $data_order['delivery_time'] = time();
  1347.         }
  1348.         /*D('Aaep_api_log')->data(['type'=>'ceshi2','time'=>time(),'content'=>json_encode($data_order)])->add();
  1349.         file_put_contents('./lallaaaaaaaa.txt', json_encode($data_order));*/
  1350.         if (D('Order')->where(array('order_id' => $nowOrder['order_id']))->data($data_order)->save()) {
  1351.             $tuan_team = array();
  1352.             if ($nowOrder['type'] == 4) {
  1353.                 if ($nowOrder['activity_data'] != '') {
  1354.                     $this->_activity_pay_callback($nowStore, $out_trade_no, $payment_method);
  1355.                 }
  1356.             }
  1357.              else if ($nowOrder['type'] == 5) {
  1358.                 $this->_dealer_pay_callback($order_total, $nowOrder, $nowStore);
  1359.                 return array('err_code' => 0, 'err_msg' => '付款成功');
  1360.             }
  1361.              else if ($nowOrder['type'] == 6) {
  1362.                 $order_count = D('Order')->where(array(
  1363.     'store_id'     => $nowOrder['store_id'],
  1364.     'type'         => 6,
  1365.     'data_id'      => $nowOrder['data_id'],
  1366.     'data_item_id' => $nowOrder['data_item_id'],
  1367.     'status'       => array(
  1368.         'in',
  1369.         array(2, 3, 4, 7)
  1370.         )
  1371.     ))->sum('pro_num');
  1372.                 D('Tuan_team')->where(array('tuan_id' => $nowOrder['data_id'], 'order_id' => $nowOrder['order_id']))->data(array('pay_status' => 1))->save();
  1373.                 D('Tuan_team')->where(array('tuan_id' => $nowOrder['data_id'], 'team_id' => $nowOrder['data_item_id']))->data(array('order_number' => $order_count + 0))->save();
  1374.                 $tuan_count = D('Tuan_team')->where(array('tuan_id' => $nowOrder['data_id'], 'pay_status' => 1))->count('team_id');
  1375.                 D('Tuan')->where(array('id' => $nowOrder['data_id']))->data(array('count' => $tuan_count))->save();
  1376.             }
  1377.              else if ($nowOrder['type'] == 7) {
  1378.                 if ($nowOrder['presale_order_id'] == $nowOrder['order_id']) {
  1379.                     D('Presale')->where(array('id' => $nowOrder['data_id']))->setInc('buyer_count', 1);
  1380.                 }
  1381.                  else {
  1382.                     D('Presale')->where(array('id' => $nowOrder['data_id']))->setInc('pre_buyer_count', 1);
  1383.                     $presale_num = (($nowOrder['pro_num'] ? $nowOrder['pro_num'] : 0));
  1384.                     D('Presale')->where(array('id' => $nowOrder['data_id']))->setInc('buy_count', $presale_num);
  1385.                 }
  1386.             }
  1387.              else if ($nowOrder['type'] == 53) {
  1388.                 $seckill_id = $nowOrder['activity_id'];
  1389.                 $seckill_info = D('Seckill')->where(array('pigcms_id' => $seckill_id))->find();
  1390.                 if (!(empty($seckill_info['sku_id']))) {
  1391.                     $product_sku = D('Product_sku')->where(array('product_id' => $seckill_info['product_id'], 'sku_id' => $seckill_info['sku_id']))->find();
  1392.                     $product_info = D('Product')->where(array('product_id' => $seckill_info['product_id']))->find();
  1393.                     D('Product_sku')->where(array('product_id' => $seckill_info['product_id'], 'sku_id' => $seckill_info['sku_id']))->data(array('sales' => $product_sku['sales'] + 1, 'quantity' => $product_sku['quantity'] - 1))->save();
  1394.                     D('Product')->where(array('product_id' => $seckill_info['product_id']))->data(array('sales' => $product_info['sales'] + 1, 'quantity' => $product_info['quantity'] - 1))->save();
  1395.                     D('Seckill')->where(array('pigcms_id' => $seckill_id))->data(array('sales_volume' => $seckill_info['sales_volume'] + 1))->save();
  1396.                 }
  1397.                  else {
  1398.                     $product_info = D('Product')->where(array('product_id' => $seckill_info['product_id']))->find();
  1399.                     D('Product')->where(array('product_id' => $seckill_info['product_id']))->data(array('sales' => $product_info['sales'] + 1))->save();
  1400.                     D('Seckill')->where(array('pigcms_id' => $seckill_id))->data(array('sales_volume' => $seckill_info['sales_volume'] + 1))->save();
  1401.                 }
  1402.             }
  1403.  
  1404.             if (!(in_array($nowOrder['type'], array(6, 7)))) {
  1405.                 Margin::init($nowStore['store_id']);
  1406.                 $margin_balance = Margin::balance();
  1407.                 if (0 <= $margin_balance) {
  1408.                     Margin::consume($order_total, 2, '保证金扣除', 1, $nowOrder['order_id']);
  1409.                 }
  1410.             }
  1411.  
  1412.             if (empty($nowOrder['useStorePay'])) {
  1413.                 M('Common_data')->setData('total', $pay_money);
  1414.             }
  1415.  
  1416.             if (!(empty($nowOrder['drp_team_id']))) {
  1417.                 if (M('Drp_team')->checkDrpTeam($nowOrder['store_id'], true)) {
  1418.                     M('Drp_team')->setSalesInc($nowOrder['drp_team_id'], $order_total);
  1419.                 }
  1420.             }
  1421.  
  1422.             if (!(empty($nowOrder['uid']))) {
  1423.                 M('Store_user_data')->upUserData($nowOrder['store_id'], $nowOrder['uid'], 'unsend');
  1424.             }
  1425.  
  1426.             if (!(empty($nowOrder['is_point_order']))) {
  1427.                 GiftPoint::order($nowOrder['order_pay_point'], $nowOrder['order_id'], $nowOrder['store_id'], $nowOrder['uid']);
  1428.             }
  1429.  
  1430.             M('User_coupon')->save(array('is_valid' => 1), array('give_order_id' => $nowOrder['order_id']));
  1431.             if (!(empty($trade_data))) {
  1432.                 $data_trade = array();
  1433.                 $data_trade['order_id'] = $nowOrder['order_id'];
  1434.                 $data_trade['third_data'] = serialize($trade_data);
  1435.                 D('Order_trade')->data($data_trade)->add();
  1436.             }
  1437.  
  1438.             $top_supplier_id = $nowStore['store_id'];
  1439.             $type = 1;
  1440.             if (!(empty($nowOrder['is_fx']))) {
  1441.                 if (!(empty($nowStore['drp_supplier_id']))) {
  1442.                     $type = 5;
  1443.                     $top_supplier_id = M('Store_supplier')->getSupplierId($nowStore['store_id']);
  1444.                 }
  1445.             }
  1446.  
  1447.             $data_store = array();
  1448.             $data_store['income'] = $nowStore['income'] + $order_total;
  1449.             $data_store['sales'] = $nowStore['sales'] + $order_total;
  1450.             $data_store['orders'] = $nowStore['orders'] + 1;
  1451.             if (empty($nowOrder['useStorePay']) || ($nowOrder['storePay'] != $nowStore['store_id'])) {
  1452.                 if (!(empty($nowOrder['is_fx'])) || ($payment_method != 'point')) {
  1453.                     $data_store['unbalance'] = $nowStore['unbalance'] + $order_total;
  1454.                 }//平台支付
  1455.             }else if(!empty($nowOrder['useStorePay'])){//商家自己的支付
  1456.                 $cash_point_money = 0;
  1457.                 if($nowOrder['is_eb'] == 1 && option('credit.ep_balance_open')){
  1458.                     $cash_point_money = $nowOrder['eb_balace'];
  1459.                 }
  1460.                 if($payment_method == 'eb_pay' || $payment_method == 'test'){
  1461.                     $data_store['unbalance'] = $nowStore['unbalance'] + $order_total;
  1462.                 }else{
  1463.                     $data_store['unbalance'] = $nowStore['unbalance'] + $cash_point_money;
  1464.                 }
  1465.             }
  1466.  
  1467.             $data_store['last_edit_time'] = time();
  1468.             if (D('Store')->where(array('store_id' => $nowOrder['store_id']))->data($data_store)->save()) {
  1469.                 $data_financial_record['store_id'] = $nowOrder['store_id'];
  1470.                 $data_financial_record['order_id'] = $nowOrder['order_id'];
  1471.                 $data_financial_record['order_no'] = $nowOrder['order_no'];
  1472.                 $data_financial_record['income'] = $order_total;
  1473.                 $data_financial_record['type'] = $type;
  1474.                 $data_financial_record['balance'] = $nowStore['income'];
  1475.                 $data_financial_record['payment_method'] = $payment_method;
  1476.                 $data_financial_record['trade_no'] = $nowOrder['trade_no'];
  1477.                 $data_financial_record['add_time'] = $_SERVER['REQUEST_TIME'];
  1478.                 $data_financial_record['user_order_id'] = $nowOrder['order_id'];
  1479.                 $data_financial_record['storeOwnPay'] = $nowOrder['useStorePay'];
  1480.                 $data_financial_record['supplier_id'] = $top_supplier_id;
  1481.                 arrlog($data_financial_record,'Financial_record');
  1482.                 $financial_record_id = D('Financial_record')->data($data_financial_record)->add();
  1483.             }
  1484.  
  1485.             $drp_level = $nowStore['drp_level'];
  1486.             $max_drp_level = $drp_level;
  1487.             $drp_multi_level = false;
  1488.             $max_store_drp_level = option('config.max_store_drp_level');
  1489.             if ((3 < $drp_level) && ((3 < $max_store_drp_level) || empty($max_store_drp_level))) {
  1490.                 $drp_level = 3;
  1491.                 $drp_multi_level = true;
  1492.             }
  1493.  
  1494.             $order_products = D('Order_product')->where(array('order_id' => $nowOrder['order_id']))->select();
  1495.             $wholesale_products = array();
  1496.             $wholesale_suppliers = array();
  1497.             $owner_products = array();
  1498.             $first_product_name = '';
  1499.             foreach ($order_products as $i => $value ) {
  1500.                 $subscribed_discount = 0;
  1501.                 if (!(empty($value['subscribed_discount'])) && (0 < $value['subscribed_discount']) && ($value['subscribed_discount'] < 10)) {
  1502.                     $subscribed_discount = ($value['pro_price'] / $value['subscribed_discount'] / 10) - $value['pro_price'];
  1503.                 }
  1504.  
  1505.                 $order_products[$i]['subscribed_discount'] = $subscribed_discount;
  1506.                 $product = M('Product')->get(array('product_id' => $value['product_id']));
  1507.                 if (!($first_product_name)) {
  1508.                     $first_product_name = msubstr($product['name'], 0, 11);
  1509.                 }
  1510.  
  1511.                 if (!(empty($value['is_fx']))) {
  1512.                     $order_products[$i] = array('store_id' => (empty($product['supplier_id']) ? $product['store_id'] : 0), 'order_product_id' => $value['pigcms_id'], 'product_id' => $value['product_id'], 'sku_id' => $value['sku_id'], 'sku_data' => $value['sku_data'], 'quantity' => $value['pro_num'], 'price' => $value['pro_price'], 'cost_price' => $product['cost_price'], 'postage_type' => $product['postage_type'], 'postage' => $product['postage'], 'postage_template_id' => $product['postage_template_id'], 'source_product_id' => (!(empty($product['source_product_id'])) ? $product['source_product_id'] : $product['product_id']), 'original_product_id' => (!(empty($product['original_product_id'])) ? $product['original_product_id'] : $product['product_id']), 'comment' => $value['comment'], 'is_fx' => $product['is_fx'], 'unified_price_setting' => $product['unified_price_setting'], 'unified_profit' => (!(empty($product['unified_profit'])) ? $product['unified_profit'] : 0), 'drp_level_1_cost_price' => $product['drp_level_1_cost_price'], 'drp_level_2_cost_price' => $product['drp_level_2_cost_price'], 'drp_level_3_cost_price' => $product['drp_level_3_cost_price'], 'drp_level_1_price' => $product['drp_level_1_price'], 'drp_level_2_price' => $product['drp_level_2_price'], 'drp_level_3_price' => $product['drp_level_3_price'], 'subscribed_discount' => $subscribed_discount);
  1513.                 }
  1514.  
  1515.                 if (!(empty($value['supplier_id']))) {
  1516.                     if (!(empty($product['wholesale_product_id']))) {
  1517.                         $wholesale_products[$product['supplier_id'] . ',' . $product['store_id']][] = array('order_product_id' => $value['pigcms_id'], 'product_id' => $value['product_id'], 'sku_id' => $value['sku_id'], 'sku_data' => $value['sku_data'], 'quantity' => $value['pro_num'], 'comment' => $value['comment'], 'wholesale_price' => $product['wholesale_price'], 'wholesale_product_id' => $product['wholesale_product_id'], 'unified_profit' => (!(empty($product['unified_profit'])) ? $product['unified_profit'] : 0), 'price' => $value['pro_price'], 'is_comment' => $value['is_comment'], 'is_present' => $value['is_present'], 'user_order_id' => $value['user_order_id'], 'return_status' => $value['return_status'], 'cost_price' => $product['cost_price'], 'drp_level_1_cost_price' => $product['drp_level_1_cost_price']);
  1518.                         $wholesale_suppliers[] = $product['supplier_id'];
  1519.                     }
  1520.  
  1521.                     if (!(empty($nowOrder['presale_order_id'])) || ($nowOrder['type'] != 7)) {
  1522.                         if (!(empty($product['wholesale_product_id']))) {
  1523.                             sync_sku($value['product_id'], $product['wholesale_product_id'], $value['sku_data'], $value['pro_num']);
  1524.                         }
  1525.                          else {
  1526.                             sync_sku($value['product_id'], $value['product_id'], $value['sku_data'], $value['pro_num']);
  1527.                         }
  1528.                     }
  1529.                 }
  1530.                  else {
  1531.                     $owner_products[] = array('product_id' => $product['product_id'], 'store_id' => $nowStore['store_id'], 'sku_data' => $value['sku_data'], 'wholesale_product_id' => 0, 'supplier_id' => 0, 'pro_num' => $value['pro_num'], 'pro_price' => $value['pro_price']);
  1532.                     if (!(empty($nowOrder['presale_order_id'])) || ($nowOrder['type'] != 7)) {
  1533.                         sync_sku($value['product_id'], $value['product_id'], $value['sku_data'], $value['pro_num'], false);
  1534.                         D('Product')->where(array('product_id' => $value['product_id']))->setInc('sales', $value['pro_num']);
  1535.                         if (!(empty($value['sku_id']))) {
  1536.                             D('Product')->where(array('product_id' => $value['product_id'], 'sku_id' => $value['sku_id']))->setInc('sales', $value['pro_num']);
  1537.                         }
  1538.                     }
  1539.                 }
  1540.             }
  1541.             if (!(empty($owner_products))) {
  1542.                 $owner_sub_total = 0;
  1543.                 foreach ($owner_products as $owner_product ) {
  1544.                     $owner_sub_total += $owner_product['pro_price'] * $owner_product['pro_num'];
  1545.                 }
  1546.                 $postages = unserialize($nowOrder['fx_postage']);
  1547.                 $postage = 0;
  1548.                 if (!(empty($postages[$nowOrder['store_id']]))) {
  1549.                     $postage = $postages[$nowOrder['store_id']];
  1550.                 }
  1551.  
  1552.                 $owner_discount_amount = Order::orderDiscount($nowOrder, $owner_products, true);
  1553.                 $owner_total = ($owner_sub_total - $owner_discount_amount) + $postage;
  1554.                 if (0 < $owner_total) {
  1555.                     D('Order')->where(array('order_id' => $nowOrder['order_id']))->data(array('sale_total' => $owner_total))->save();
  1556.                 }
  1557.             }
  1558.  
  1559.             if (!(empty($nowOrder['useStorePay'])) && !(empty($nowOrder['storePay']))) {
  1560.                 D('Store')->where(array('store_id' => $nowOrder['storePay']))->setInc('store_pay_income', $nowOrder['total']);
  1561.             }
  1562.  
  1563.             if (empty($nowOrder['is_fx'])) {
  1564.                 if ($nowOrder['is_offline'] == 1) {
  1565.                     $recom = $this->auto_order_save($nowOrder['store_id'],$nowOrder['order_no']);
  1566.                     //logs('一码支付订单完成',$recom);
  1567.                 }
  1568.                 Notice::OrderPaymentSuccess($nowOrder, $first_product_name);
  1569.                 return array('err_code' => 0, 'err_msg' => '付款成功');
  1570.             }
  1571.  
  1572.             if (!(empty($order_products)) && !(empty($nowOrder['is_fx']))) {
  1573.                 $fx_order = M('Fx_order');
  1574.                 $fx_order_product = M('Fx_order_product');
  1575.                 $disabled_sellers = array();
  1576.                 $disabled_levels = array();
  1577.                 global $drp_degree_reward_profits;
  1578.                 $drp_degree_reward_profits = array();
  1579.                 global $subscribed_discounts;
  1580.                 $subscribed_discounts = array();
  1581.                 $supplier_id = $nowStore['drp_supplier_id'];
  1582.                 $supplier_info = D('Store')->field('store_id,status,drp_supplier_id,drp_level')->where(array('store_id' => $supplier_id))->find();
  1583.                 if ($supplier_info['status'] != 1) {
  1584.                     if (!(empty($supplier_info['drp_supplier_id']))) {
  1585.                         $supplier_id = $supplier_info['drp_supplier_id'];
  1586.                     }
  1587.  
  1588.                     $disabled_sellers[] = $supplier_id;
  1589.                     $disabled_levels[] = $drp_level - 1;
  1590.                 }
  1591.  
  1592.                 if (!(empty($supplier_info['drp_supplier_id']))) {
  1593.                     $supplier_info = D('Store')->field('store_id,status,drp_supplier_id,drp_level')->where(array('store_id' => $supplier_info['drp_supplier_id']))->find();
  1594.                     if ($supplier_info['status'] != 1) {
  1595.                         if (in_array($supplier_id, $disabled_sellers)) {
  1596.                             $supplier_id = $top_supplier_id;
  1597.                         }
  1598.  
  1599.                         $disabled_sellers[] = $supplier_info['store_id'];
  1600.                         $disabled_levels[] = $drp_level - 2;
  1601.                     }
  1602.                 }
  1603.  
  1604.                 $fx_order_no = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  1605.                 $sub_total = 0;
  1606.                 $cost_sub_total = 0;
  1607.                 $sale_profit_total = 0;
  1608.                 $disabled_seller_profit = 0;
  1609.                 $quantity = 0;
  1610.                 $supplier_product_sub_total = 0;
  1611.                 $supplier_product_cost_sub_total = 0;
  1612.                 $sub_profit_total = 0;
  1613.                 $tmp_drp_level = $drp_level;
  1614.                 foreach ($order_products as $k => $product ) {
  1615.                     if (!(empty($product['unified_profit']))) {
  1616.                         $drp_level = 3;
  1617.                     }
  1618.                      else {
  1619.                         $drp_level = $tmp_drp_level;
  1620.                     }
  1621.                     $drp_degree_reward = Order::drpDegreeReward($top_supplier_id, $nowOrder['store_id'], $product['product_id'], $drp_level);
  1622.                     $properties = getProperty2Str($product['sku_data']);
  1623.                     $sale_profit = 0;
  1624.                     $seller_profit = 0;
  1625.                     if (!(empty($properties))) {
  1626.                         $sku = M('Product_sku')->getSku($product['product_id'], $properties);
  1627.                         if (!(empty($product['is_fx']))) {
  1628.                             $cost_price = ((0 < $sku['drp_level_' . $drp_level . '_cost_price'] ? $sku['drp_level_' . $drp_level . '_cost_price'] : $sku['price']));
  1629.                             if (!(empty($disabled_sellers))) {
  1630.                                 foreach ($disabled_sellers as $key2 => $disabled_seller ) {
  1631.                                     if ($disabled_seller == $nowStore['drp_supplier_id']) {
  1632.                                         $cost_price = ((0 < $sku['drp_level_' . $disabled_levels[$key2] . '_cost_price'] ? $sku['drp_level_' . $disabled_levels[$key2] . '_cost_price'] : $sku['price']));
  1633.                                     }
  1634.  
  1635.                                     $cost_price_1 = ((0 < $sku['drp_level_' . ($disabled_levels[$key2] + 1) . '_cost_price'] ? $sku['drp_level_' . ($disabled_levels[$key2] + 1) . '_cost_price'] : $sku['price']));
  1636.                                     $cost_price_2 = ((0 < $sku['drp_level_' . $disabled_levels[$key2] . '_cost_price'] ? $sku['drp_level_' . $disabled_levels[$key2] . '_cost_price'] : $sku['price']));
  1637.                                     $disabled_seller_profit += $cost_price_1 - $cost_price_2;
  1638.                                 }
  1639.                             }
  1640.                         }
  1641.                          else {
  1642.                             $cost_price = $sku['price'];
  1643.                         }
  1644.                         if ((0 < $drp_level) && ($drp_level < 3) && empty($product['unified_profit'])) {
  1645.                             $sub_profit = $sku['price'] - $sku['drp_level_' . ($drp_level + 1) . '_cost_price'];
  1646.                             $sub_profit_total += $sub_profit;
  1647.                             $cost_price += $sub_profit;
  1648.                         }
  1649.  
  1650.                         if (0 < $product['subscribed_discount']) {
  1651.                             $cost_price -= $product['subscribed_discount'];
  1652.                             $subscribed_discounts[$properties . ':' . $product['product_id']] = $product['subscribed_discount'];
  1653.                         }
  1654.  
  1655.                         $order_products[$k]['cost_price'] = $cost_price;
  1656.                     }
  1657.                      else {
  1658.                         if (!(empty($product['is_fx']))) {
  1659.                             $cost_price = ((0 < $product['drp_level_' . $drp_level . '_cost_price'] ? $product['drp_level_' . $drp_level . '_cost_price'] : $product['price']));
  1660.                             if (!(empty($disabled_sellers))) {
  1661.                                 foreach ($disabled_sellers as $key2 => $disabled_seller ) {
  1662.                                     if ($disabled_seller == $nowStore['drp_supplier_id']) {
  1663.                                         $cost_price = ((0 < $product['drp_level_' . $disabled_levels[$key2] . '_cost_price'] ? $product['drp_level_' . $disabled_levels[$key2] . '_cost_price'] : $product['price']));
  1664.                                     }
  1665.  
  1666.                                     $cost_price_1 = ((0 < $product['drp_level_' . ($disabled_levels[$key2] + 1) . '_cost_price'] ? $product['drp_level_' . ($disabled_levels[$key2] + 1) . '_cost_price'] : $product['price']));
  1667.                                     $cost_price_2 = ((0 < $product['drp_level_' . $disabled_levels[$key2] . '_cost_price'] ? $product['drp_level_' . $disabled_levels[$key2] . '_cost_price'] : $product['price']));
  1668.                                     $disabled_seller_profit += $cost_price_1 - $cost_price_2;
  1669.                                 }
  1670.                             }
  1671.                         }
  1672.                          else {
  1673.                             $cost_price = $product['price'];
  1674.                         }
  1675.                         if ((0 < $drp_level) && ($drp_level < 3) && empty($product['unified_profit'])) {
  1676.                             $sub_profit = $product['price'] - $product['drp_level_' . ($drp_level + 1) . '_cost_price'];
  1677.                             $sub_profit_total += $sub_profit;
  1678.                             $cost_price += $sub_profit;
  1679.                         }
  1680.  
  1681.                         if (0 < $product['subscribed_discount']) {
  1682.                             $cost_price -= $product['subscribed_discount'];
  1683.                             $subscribed_discounts[$product['product_id']] = $product['subscribed_discount'];
  1684.                         }
  1685.  
  1686.                         $order_products[$k]['cost_price'] = $cost_price;
  1687.                     }
  1688.                     if (0 < ($product['price'] - $cost_price)) {
  1689.                         $pro_profit = $product['price'] - $cost_price;
  1690.                         $drp_degree_reward_profit = 0;
  1691.                         if (0 < $drp_degree_reward) {
  1692.                             $drp_degree_reward_profit = $pro_profit * $drp_degree_reward;
  1693.                             if ($properties) {
  1694.                                 $drp_degree_reward_profits[$properties . ':' . $product['product_id']] = $drp_degree_reward_profit;
  1695.                             }
  1696.                              else {
  1697.                                 $drp_degree_reward_profits[$product['product_id']] = $drp_degree_reward_profit;
  1698.                             }
  1699.                             $cost_price -= $drp_degree_reward_profit;
  1700.                             $pro_profit += $drp_degree_reward_profit;
  1701.                             $order_products[$k]['cost_price'] -= $drp_degree_reward_profit;
  1702.                         }
  1703.  
  1704.                         if (0 < $pro_profit) {
  1705.                             D('Order_product')->where(array('pigcms_id' => $product['order_product_id']))->data(array('profit' => $pro_profit, 'drp_degree_profit' => $drp_degree_reward_profit))->save();
  1706.                         }
  1707.                     }
  1708.  
  1709.                     $price = $product['price'];
  1710.                     $sub_total += $price * $product['quantity'];
  1711.                     $cost_sub_total += $cost_price * $product['quantity'];
  1712.                     $quantity += $product['quantity'];
  1713.                     if ($top_supplier_id == $product['store_id']) {
  1714.                         $supplier_product_sub_total += $price * $product['quantity'];
  1715.                         $supplier_product_cost_sub_total += $cost_price * $product['quantity'];
  1716.                     }
  1717.                 }
  1718.                 $sale_profit_total += $sub_profit_total;
  1719.                 $postage = ((!(empty($nowOrder['postage'])) ? $nowOrder['postage'] : 0));
  1720.                 $total = $sub_total + $postage;
  1721.                 $cost_total = $cost_sub_total + $postage;
  1722.                 $data = array('fx_order_no' => $fx_order_no, 'uid' => $nowOrder['uid'], 'session_id' => $nowOrder['session_id'], 'order_id' => $nowOrder['order_id'], 'order_no' => $nowOrder['order_no'], 'fx_trade_no' => date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999), 'supplier_id' => $supplier_id, 'store_id' => $nowOrder['store_id'], 'quantity' => $quantity, 'sub_total' => $sub_total, 'cost_sub_total' => $cost_sub_total, 'postage' => $postage, 'total' => $total, 'cost_total' => $cost_total, 'delivery_user' => $nowOrder['address_user'], 'delivery_tel' => $nowOrder['address_tel'], 'delivery_address' => $nowOrder['address'], 'add_time' => time(), 'user_order_id' => $nowOrder['order_id'], 'fx_postage' => $nowOrder['fx_postage'], 'status' => 2, 'suppliers' => $nowOrder['suppliers']);
  1723.                 if ($fx_order_id = $fx_order->add($data)) {
  1724.                     M('Order')->setFxOrder($nowOrder['store_id'], $nowOrder['order_id']);
  1725.                     foreach ($order_products as $product ) {
  1726.                         $fx_order_product->add(array('fx_order_id' => $fx_order_id, 'product_id' => $product['product_id'], 'source_product_id' => $product['product_id'], 'price' => $product['price'], 'cost_price' => $product['cost_price'], 'quantity' => $product['quantity'], 'sku_id' => $product['sku_id'], 'sku_data' => $product['sku_data'], 'comment' => $product['comment']));
  1727.                     }
  1728.                 }
  1729.  
  1730.                 if (!(empty($financial_record_id)) && (0 <= $cost_total)) {
  1731.                     if (!(empty($wholesale_products)) && empty($nowStore['drp_supplier_id'])) {
  1732.                         $type = 6;
  1733.                     }
  1734.  
  1735.                     $profit = $total - $cost_total;
  1736.                     if (0 <= $profit) {
  1737.                         D('Financial_record')->where(array('pigcms_id' => $financial_record_id))->data(array('profit' => $profit, 'type' => $type))->save();
  1738.                     }
  1739.                 }
  1740.             }
  1741.  
  1742.             $supplier_chain = D('Store_supplier')->field('supply_chain')->where(array('seller_id' => $nowStore['store_id'], 'type' => 1))->find();
  1743.             $supply_chain = $supplier_chain['supply_chain'];
  1744.             $supply_chain = explode(',', $supply_chain);
  1745.             $where = array();
  1746.             $where['status'] = 1;
  1747.             $where['drp_approve'] = 1;
  1748.             $where['drp_level'] = array('<', $nowStore['drp_level']);
  1749.             $where['store_id'] = array('in', $supply_chain);
  1750.             $where['_string'] = '(root_supplier_id = \'' . $nowStore['root_supplier_id'] . '\' OR store_id = \'' . $nowStore['root_supplier_id'] . '\')';
  1751.             $suppliers = D('Store')->where($where)->order('drp_level DESC')->limit(3)->select();
  1752.             if (!(empty($suppliers))) {
  1753.                 foreach ($suppliers as $i => $supplier ) {
  1754.                     $fx_order_info = D('Fx_order')->where(array('supplier_id' => $supplier['store_id'], 'user_order_id' => $nowOrder['order_id']))->find();
  1755.                     if (!(empty($fx_order_info))) {
  1756.                         $tmp_data['trade_no'] = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  1757.                         $tmp_data['total'] = $fx_order_info['cost_total'];
  1758.                         $tmp_data['postage'] = $fx_order_info['postage'];
  1759.                         $tmp_data['order_id'] = $fx_order_info['fx_order_id'];
  1760.                         $tmp_data['supplier_id'] = $supplier['store_id'];
  1761.                         $tmp_data['seller_id'] = $fx_order_info['store_id'];
  1762.                         $tmp_data['max_drp_level'] = $max_drp_level;
  1763.                         $tmp_data['drp_supplier_id'] = ((!(empty($suppliers[$i + 1]['store_id'])) ? $suppliers[$i + 1]['store_id'] : $top_supplier_id));
  1764.                         if ($max_drp_level < 3) {
  1765.                             $tmp_data['drp_level'] = 1 - $i;
  1766.                         }
  1767.                          else {
  1768.                             $tmp_data['drp_level'] = 2 - $i;
  1769.                         }
  1770.                         $tmp_data['useStorePay'] = $nowOrder['useStorePay'];
  1771.                         $tmp_data['storePay'] = $nowOrder['storePay'];
  1772.                         $tmp_data['third_id'] = $out_trade_no;
  1773.                         $tmp_data['payment_method'] = $payment_method;
  1774.                         $tmp_data['top_supplier_id'] = $top_supplier_id;
  1775.                         $tmp_data['user_order_id'] = $nowOrder['order_id'];
  1776.                         $tmp_data['pay_money'] = $nowOrder['total'] + ($nowOrder['cash_point'] / $nowOrder['point2money_rate']);
  1777.                         $tmp_data['drp_multi_level'] = $drp_multi_level;
  1778.                         if ((0 < $sale_profit_total) || (0 < $disabled_seller_profit)) {
  1779.                             if ((1 < $max_drp_level) && ($i == 0) && (0 < $sale_profit_total)) {
  1780.                                 $tmp_data['sale_profit_total'] = $sale_profit_total;
  1781.                             }
  1782.                              else if (1 < $max_drp_level) {
  1783.                                 $tmp_data['sale_profit_total'] = -($sale_profit_total + $disabled_seller_profit);
  1784.                             }
  1785.                         }
  1786.  
  1787.                         $this->_fx_order($tmp_data);
  1788.                     }
  1789.                 }
  1790.             }
  1791.  
  1792.             if (!(empty($wholesale_products)) && ($drp_level == 0)) {
  1793.                 foreach ($wholesale_products as $tmp_key => $tmp_wholesale_products ) {
  1794.                     $keys = explode(',', $tmp_key);
  1795.                     $supplier_id = $keys[0];
  1796.                     $seller_id = $keys[1];
  1797.                     $this->_ws_order($nowOrder['order_id'], $supplier_id, $seller_id, $tmp_wholesale_products, false, $nowOrder['useStorePay']);
  1798.                 }
  1799.             }
  1800.  
  1801.             if ($nowOrder['type'] == 6) {
  1802.                 $tuan_team = D('Tuan_team')->where(array('team_id' => $nowOrder['data_item_id']))->find();
  1803.                 if (!(empty($tuan_team)) && ($tuan_team['order_id'] != $nowOrder['order_id'])) {
  1804.                     $url = option('config.site_url') . '/webapp/groupbuy/#/detailinfo/' . $tuan_team['tuan_id'] . '/' . $tuan_team['type'] . '/' . $tuan_team['item_id'] . '/' . $tuan_team['team_id'];
  1805.                     ShopNotice::TuanSuccessNotice($tuan_team['uid'], $nowOrder['uid'], $nowOrder['store_id'], $nowOrder['data_id'], $url);
  1806.                 }
  1807.             }
  1808.             /*if ($nowOrder['is_offline'] == 1) {
  1809.                 $this->auto_order_save($nowOrder['store_id'],$nowOrder['order_no']);
  1810.             }*/
  1811.  
  1812.             Notice::OrderPaymentSuccess($nowOrder, $first_product_name);
  1813.             return array('err_code' => 0, 'err_msg' => '付款成功');
  1814.         }
  1815.     }
  1816.     //一码支付订单处理
  1817.     public function auto_order_save($store_id,$order_no)
  1818.     {
  1819.         import('source.class.Order');
  1820.         $order = D('Order')->where(array('order_no' => $order_no, 'status' => array('in', array(2, 3, 7))))->find();
  1821.         if (empty($order)) {
  1822.             json_return(1001, '订单不存在');
  1823.         }
  1824.         $result = Order::complate($order['order_id']);
  1825.         if (!empty($result['err_code'])) {
  1826.             json_return($result['err_code'], $result['err_msg']);
  1827.         } else {
  1828.             //客户经理/城主提成
  1829.             import('source.class.Reward');
  1830.             $reward = new Reward('ep7941ffea4379e027','1483239892','epoiqg81tlknwgqiqlk0815ymdvqi1lk');
  1831.             $reward->bonus($order['order_id']);
  1832.            //首单店铺
  1833.             import('FirstStore');
  1834.             FirstStore::confirmation($order['order_id'],$order['uid']);
  1835.             return true;
  1836.             //json_return(0, '订单交易完成');
  1837.         }
  1838.     }
  1839.     private function _ws_order($user_order_id, $supplier_id, $seller_id, $products, $is_seller, $useStorePay)
  1840.     {
  1841.         $sub_total = 0;
  1842.         $cost_sub_total = 0;
  1843.         $quantity = 0;
  1844.         $seller = D('Store')->field('uid,name,income')->where(array('store_id' => $seller_id))->find();
  1845.         $supplier = D('Store')->field('uid,name,income,wxpay')->where(array('store_id' => $supplier_id))->find();
  1846.         if (!(empty($is_seller))) {
  1847.             $order = D('Order')->where(array('store_id' => $seller_id, 'user_order_id' => $user_order_id))->find();
  1848.         }
  1849.          else {
  1850.             $order = D('Order')->where(array('store_id' => $seller_id, 'order_id' => $user_order_id))->find();
  1851.         }
  1852.         $dealer_profit = 0;
  1853.         foreach ($products as $key => $product ) {
  1854.             $properties = getProperty2Str($product['sku_data']);
  1855.             if ($properties) {
  1856.                 $sku = M('Product_sku')->getSku($product['product_id'], $properties);
  1857.                 $price = $sku['price'];
  1858.                 $cost_price = $sku['wholesale_price'];
  1859.                 $drp_level_1_cost_price = ((0 < $sku['drp_level_1_cost_price'] ? $sku['drp_level_1_cost_price'] : $price));
  1860.                 $tmp_order_product = D('Order_product')->field('pro_price')->where(array('user_order_id' => $user_order_id, 'product_id' => $product['product_id'], 'sku_data' => $product['sku_data']))->order('pigcms_id DESC')->find();
  1861.                 if (!(empty($product['unified_profit'])) || ($tmp_order_product['pro_price'] != $drp_level_1_cost_price)) {
  1862.                     if (!(empty($tmp_order_product['pro_price']))) {
  1863.                         $drp_level_1_cost_price = $tmp_order_product['pro_price'];
  1864.                     }
  1865.                 }
  1866.             }
  1867.              else {
  1868.                 $price = $product['price'];
  1869.                 $cost_price = $product['wholesale_price'];
  1870.                 $drp_level_1_cost_price = ((0 < $product['drp_level_1_cost_price'] ? $product['drp_level_1_cost_price'] : $price));
  1871.                 $tmp_order_product = D('Order_product')->field('pro_price')->where(array('user_order_id' => $user_order_id, 'product_id' => $product['product_id']))->order('pigcms_id DESC')->find();
  1872.                 if (!(empty($product['unified_profit'])) || ($tmp_order_product['pro_price'] != $drp_level_1_cost_price)) {
  1873.                     if (!(empty($tmp_order_product['pro_price']))) {
  1874.                         $drp_level_1_cost_price = $tmp_order_product['pro_price'];
  1875.                     }
  1876.                 }
  1877.             }
  1878.             if (0 < ($price - $cost_price)) {
  1879.                 if (!(empty($is_seller))) {
  1880.                     $pro_profit = $drp_level_1_cost_price - $cost_price;
  1881.                 }
  1882.                  else {
  1883.                     $pro_profit = $price - $cost_price;
  1884.                 }
  1885.                 D('Order_product')->where(array('pigcms_id' => $product['order_product_id']))->data(array('profit' => $pro_profit))->save();
  1886.                 $dealer_profit += $product['quantity'] * $pro_profit;
  1887.             }
  1888.  
  1889.             $products[$key]['cost_price'] = $cost_price;
  1890.             $sub_total += $price * $product['quantity'];
  1891.             $cost_sub_total += $cost_price * $product['quantity'];
  1892.             $quantity += $product['quantity'];
  1893.         }
  1894.         $fx_postages = array();
  1895.         if (!(empty($order['fx_postage']))) {
  1896.             $fx_postages = unserialize($order['fx_postage']);
  1897.         }
  1898.  
  1899.         $postage = ((!(empty($fx_postages[$supplier_id])) ? $fx_postages[$supplier_id] : 0));
  1900.         $total = $sub_total + $postage;
  1901.         $cost_total = $cost_sub_total + $postage;
  1902.         $fx_order_no = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  1903.         $data = array('fx_order_no' => $fx_order_no, 'uid' => $order['uid'], 'session_id' => $order['session_id'], 'order_id' => $order['order_id'], 'order_no' => $order['order_no'], 'fx_trade_no' => date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999), 'supplier_id' => $supplier_id, 'store_id' => $seller_id, 'quantity' => $quantity, 'sub_total' => $sub_total, 'cost_sub_total' => $cost_sub_total, 'postage' => $postage, 'total' => $total, 'cost_total' => $cost_total, 'delivery_user' => $order['address_user'], 'delivery_tel' => $order['address_tel'], 'delivery_address' => $order['address'], 'add_time' => time(), 'user_order_id' => $user_order_id, 'fx_postage' => $order['fx_postage'], 'paid_time' => time(), 'status' => 2);
  1904.         if ($fx_order_id = M('Fx_order')->add($data)) {
  1905.             foreach ($products as $product ) {
  1906.                 M('Fx_order_product')->add(array('fx_order_id' => $fx_order_id, 'product_id' => $product['product_id'], 'source_product_id' => $product['wholesale_product_id'], 'price' => $product['price'], 'cost_price' => $product['cost_price'], 'quantity' => $product['quantity'], 'sku_id' => $product['sku_id'], 'sku_data' => $product['sku_data'], 'comment' => $product['comment']));
  1907.             }
  1908.             $fx_order_info = M('Fx_order')->getOrder($seller_id, $fx_order_id);
  1909.             $order_id = $fx_order_info['order_id'];
  1910.             $order_info = D('Order')->where(array('order_id' => $order_id))->find();
  1911.             $trade_no = date('YmdHis', time()) . mt_rand(100000, 999999);
  1912.             unset($order_info['order_id']);
  1913.             $order_info['order_no'] = date('YmdHis', time()) . mt_rand(100000, 999999);
  1914.             $order_info['store_id'] = $data['supplier_id'];
  1915.             $order_info['uid'] = $seller['uid'];
  1916.             $order_info['session_id'] = '';
  1917.             $order_info['postage'] = $fx_order_info['postage'];
  1918.             $order_info['sub_total'] = $fx_order_info['cost_sub_total'];
  1919.             $order_info['total'] = $fx_order_info['cost_total'];
  1920.             if (!(empty($useStorePay))) {
  1921.                 $order_info['status'] = 1;
  1922.                 $order_info['trade_no'] = '';
  1923.                 $order_info['paid_time'] = 0;
  1924.                 $order_info['third_id'] = '';
  1925.                 $order_info['payment_method'] = 'balance';
  1926.             }
  1927.              else {
  1928.                 $order_info['status'] = 2;
  1929.                 $order_info['trade_no'] = $trade_no;
  1930.                 $order_info['paid_time'] = time();
  1931.                 $order_info['third_id'] = $order['third_id'];
  1932.                 $order_info['payment_method'] = $order['payment_method'];
  1933.             }
  1934.             $order_info['pro_count'] = 0;
  1935.             $order_info['pro_num'] = $fx_order_info['quantity'];
  1936.             $order_info['type'] = 5;
  1937.             $order_info['add_time'] = time();
  1938.             $order_info['sent_time'] = 0;
  1939.             $order_info['cancel_time'] = 0;
  1940.             $order_info['complate_time'] = 0;
  1941.             $order_info['refund_time'] = 0;
  1942.             $order_info['star'] = 0;
  1943.             $order_info['pay_money'] = $fx_order_info['cost_total'];
  1944.             $order_info['cancel_method'] = 0;
  1945.             $order_info['float_amount'] = 0;
  1946.             $order_info['is_fx'] = 0;
  1947.             $order_info['fx_order_id'] = $fx_order_id;
  1948.             $order_info['user_order_id'] = $fx_order_info['user_order_id'];
  1949.             $order_info['suppliers'] = $data['supplier_id'];
  1950.             $order_info['fx_postage'] = '';
  1951.             if ($order_id = M('Order')->add($order_info)) {
  1952.                 $order_info['order_id'] = $order_id;
  1953.                 $nowOrder = $order_info;
  1954.                 $order_ws_products = array();
  1955.                 $owner_products = array();
  1956.                 foreach ($products as $product ) {
  1957.                     $properties = getProperty2Str($product['sku_data']);
  1958.                     if ($properties) {
  1959.                         $sku = M('Product_sku')->getSku($product['wholesale_product_id'], $properties);
  1960.                         $sku_id = $sku['sku_id'];
  1961.                     }
  1962.                      else {
  1963.                         $sku_id = 0;
  1964.                     }
  1965.                     $data = array('order_id' => $order_id, 'product_id' => $product['wholesale_product_id'], 'sku_id' => $sku_id, 'sku_data' => $product['sku_data'], 'pro_num' => $product['quantity'], 'pro_price' => $product['cost_price'], 'pro_weight' => $product['pro_weight'], 'comment' => $product['comment'], 'is_packaged' => 0, 'in_package_status' => 0, 'is_fx' => 0, 'supplier_id' => 0, 'original_product_id' => 0, 'user_order_id' => $product['user_order_id'], 'is_present' => $product['is_present'], 'is_comment' => $product['is_comment']);
  1966.                     $order_ws_products[] = array('product_id' => $product['wholesale_product_id'], 'store_id' => $supplier_id, 'sku_data' => $product['sku_data'], 'wholesale_product_id' => 0, 'supplier_id' => 0, 'pro_num' => $product['quantity'], 'pro_price' => $product['cost_price']);
  1967.                     M('Order_product')->add($data);
  1968.                     $order_product = D('Order_product')->field('pro_num, pro_price')->where(array('order_id' => $user_order_id, 'original_product_id' => $product['wholesale_product_id'], 'sku_id' => $product['sku_id']))->find();
  1969.                     $owner_products[] = array('product_id' => $product['wholesale_product_id'], 'store_id' => $supplier_id, 'sku_data' => $product['sku_data'], 'wholesale_product_id' => 0, 'supplier_id' => 0, 'pro_num' => $order_product['pro_num'], 'pro_price' => $order_product['pro_price']);
  1970.                 }
  1971.                 $owner_sub_total = 0;
  1972.                 foreach ($owner_products as $owner_product ) {
  1973.                     $owner_sub_total += $owner_product['pro_price'] * $owner_product['pro_num'];
  1974.                 }
  1975.                 $owner_discount_amount = Order::orderDiscount($nowOrder, $owner_products, true);
  1976.                 $owner_total = ($owner_sub_total - $owner_discount_amount) + $postage;
  1977.                 $discount_amount = Order::orderDiscount($nowOrder, $order_ws_products, true);
  1978.                 $order_total = $fx_order_info['cost_total'] - $discount_amount;
  1979.                 $order_data = array();
  1980.                 $profit = 0;
  1981.                 if (0 < ($total - $order_total)) {
  1982.                     if (0 < $dealer_profit) {
  1983.                         D('Financial_record')->where(array(
  1984.     'user_order_id' => $user_order_id,
  1985.     'store_id'      => $seller_id,
  1986.     'income'        => array('>', 0)
  1987.     ))->setInc('profit', $dealer_profit);
  1988.                     }
  1989.                 }
  1990.  
  1991.                 $bond_balance_pay = false;
  1992.                 $bond = D('Supp_dis_relation')->field('bond')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->find();
  1993.                 $bond = ((!(empty($bond['bond'])) ? $bond['bond'] : 0));
  1994.                 if ($order_total < $bond) {
  1995.                     $bond_balance = ((0 < ($bond - $order_total) ? $bond - $order_total : 0));
  1996.                     $bond_data['order_id'] = $order_id;
  1997.                     $bond_data['order_no'] = $order_info['order_no'];
  1998.                     $bond_data['transaction_no'] = $trade_no;
  1999.                     $bond_data['supplier_id'] = $order_info['store_id'];
  2000.                     $bond_data['wholesale_id'] = $seller_id;
  2001.                     $bond_data['add_time'] = time();
  2002.                     $bond_data['status'] = 0;
  2003.                     $bond_data['deduct_bond'] = $order_total;
  2004.                     $bond_data['residue_bond'] = $bond_balance;
  2005.                     if (D('Bond_record')->data($bond_data)->add()) {
  2006.                         $bond_balance_pay = true;
  2007.                         $order_data['trade_no'] = $trade_no;
  2008.                         $order_data['status'] = 2;
  2009.                         $order_data['paid_time'] = time();
  2010.                         $order_data['third_id'] = date('YmdHis', time()) . mt_rand(100000, 999999);
  2011.                         $order_data['use_deposit_pay'] = 1;
  2012.                         M('Store')->setIncomeInc($supplier_id, $order_total);
  2013.                         if (!(empty($dealer_profit)) && (0 < $dealer_profit)) {
  2014.                             D('Supp_dis_relation')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->setInc('profit', $dealer_profit);
  2015.                         }
  2016.  
  2017.                         if (0 < $order_total) {
  2018.                             D('Supp_dis_relation')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->setInc('paid', $order_total);
  2019.                             D('Supp_dis_relation')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->setInc('sales', $order_total);
  2020.                         }
  2021.  
  2022.                         if (0 < $bond_balance) {
  2023.                             D('Supp_dis_relation')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->data(array('bond' => $bond_balance))->save();
  2024.                         }
  2025.  
  2026.                         $data_record = array();
  2027.                         $data_record['store_id'] = $supplier_id;
  2028.                         $data_record['order_id'] = $nowOrder['order_id'];
  2029.                         $data_record['order_no'] = $nowOrder['order_no'];
  2030.                         $data_record['income'] = $order_total;
  2031.                         $data_record['type'] = 1;
  2032.                         $data_record['balance'] = $supplier['income'];
  2033.                         $data_record['payment_method'] = $order['payment_method'];
  2034.                         $data_record['trade_no'] = $trade_no;
  2035.                         $data_record['add_time'] = time();
  2036.                         $data_record['status'] = 1;
  2037.                         $data_record['user_order_id'] = $user_order_id;
  2038.                         D('Financial_record')->data($data_record)->add();
  2039.                     }
  2040.                 }
  2041.  
  2042.                 if (empty($bond_balance_pay) && empty($useStorePay) && ($order['cash_point'] == 0)) {
  2043.                     if (0 < $order_total) {
  2044.                         D('Supp_dis_relation')->where(array('supplier_id' => $order_info['store_id'], 'distributor_id' => $seller_id))->setInc('sales', $order_total);
  2045.                     }
  2046.  
  2047.                     M('Store')->setIncomeInc($supplier_id, $order_total);
  2048.                     M('Store')->setUnBalanceInc($supplier_id, $order_total);
  2049.                     if (!(empty($dealer_profit))) {
  2050.                         D('Supp_dis_relation')->where(array('distributor_id' => $seller_id, 'supplier_id' => $supplier_id))->setInc('profit', $dealer_profit);
  2051.                     }
  2052.  
  2053.                     $data_record = array();
  2054.                     $data_record['store_id'] = $supplier_id;
  2055.                     $data_record['order_id'] = $nowOrder['order_id'];
  2056.                     $data_record['order_no'] = $nowOrder['order_no'];
  2057.                     $data_record['income'] = $order_total;
  2058.                     $data_record['type'] = 1;
  2059.                     $data_record['balance'] = $supplier['income'];
  2060.                     $data_record['payment_method'] = $order['payment_method'];
  2061.                     $data_record['trade_no'] = $trade_no;
  2062.                     $data_record['add_time'] = time();
  2063.                     $data_record['status'] = 1;
  2064.                     $data_record['user_order_id'] = $user_order_id;
  2065.                     D('Financial_record')->data($data_record)->add();
  2066.                 }
  2067.  
  2068.                 if (empty($bond_balance_pay) && !(empty($useStorePay))) {
  2069.                     D('Supp_dis_relation')->where(array('supplier_id' => $supplier_id, 'distributor_id' => $seller_id))->setInc('not_paid', $order_total);
  2070.                 }
  2071.  
  2072.                 M('Store')->setIncomeDec($seller_id, $order_total);
  2073.                 M('Store')->setUnBalanceDec($seller_id, $order_total);
  2074.                 $data_record = array();
  2075.                 $data_record['store_id'] = $seller_id;
  2076.                 $data_record['order_id'] = $order['order_id'];
  2077.                 $data_record['order_no'] = $order['order_no'];
  2078.                 $data_record['income'] = -$order_total;
  2079.                 $data_record['type'] = 6;
  2080.                 $data_record['balance'] = $seller['income'];
  2081.                 $data_record['payment_method'] = $order['payment_method'];
  2082.                 $data_record['trade_no'] = $order['trade_no'];
  2083.                 $data_record['add_time'] = time();
  2084.                 $data_record['status'] = 1;
  2085.                 $data_record['user_order_id'] = $user_order_id;
  2086.                 if (0 < $dealer_profit) {
  2087.                     $data_record['profit'] = $dealer_profit;
  2088.                 }
  2089.  
  2090.                 $data_record['supplier_id'] = $supplier_id;
  2091.                 D('Financial_record')->data($data_record)->add();
  2092.                 $order_data['total'] = $order_total;
  2093.                 $order_data['pay_money'] = $order_total;
  2094.                 if (0 < $owner_total) {
  2095.                     $order_data['sale_total'] = $owner_total;
  2096.                 }
  2097.  
  2098.                 D('Order')->where(array('order_id' => $order_id))->data($order_data)->save();
  2099.                 D('Fx_order')->where(array('fx_order_id' => $fx_order_id))->data(array('cost_total' => $order_total))->save();
  2100.             }
  2101.         }
  2102.     }
  2103.     private function _fx_order($data)
  2104.     {
  2105.         $wholesale_products = array();
  2106.         $useStorePay = $data['useStorePay'];
  2107.         $storePay = $data['storePay'];
  2108.         $total = $data['total'];
  2109.         $drp_level = ((isset($data['drp_level']) ? $data['drp_level'] : 0));
  2110.         $drp_multi_level = ((isset($data['drp_multi_level']) ? $data['drp_multi_level'] : false));
  2111.         $max_drp_level = ((isset($data['max_drp_level']) ? $data['max_drp_level'] : 0));
  2112.         $fx_order_id = $data['order_id'];
  2113.         $third_id = $data['third_id'];
  2114.         $payment_method = $data['payment_method'];
  2115.         $top_supplier_id = $data['top_supplier_id'];
  2116.         $user_order_id = $data['user_order_id'];
  2117.         $pay_money = $data['pay_money'];
  2118.         $supplier = M('Store')->getStore($data['supplier_id']);
  2119.         global $drp_degree_reward_profits;
  2120.         global $subscribed_discounts;
  2121.         if (!(empty($supplier['drp_supplier_id']))) {
  2122.             $tmp_supplier = D('Store')->field('store_id,status,drp_supplier_id,drp_level')->where(array('store_id' => $supplier['drp_supplier_id']))->find();
  2123.             if ($tmp_supplier['status'] != 1) {
  2124.                 if ((3 < $max_drp_level) && ($drp_level == 2)) {
  2125.                     $supplier_chain = D('Store_supplier')->where(array('seller_id' => $supplier['drp_supplier_id'], 'type' => 1))->find();
  2126.                     $supply_chain = explode(',', $supplier_chain['supply_chain']);
  2127.                     $supplier['drp_supplier_id'] = $supply_chain[1];
  2128.                 }
  2129.                  else {
  2130.                     $supplier['drp_supplier_id'] = ((!(empty($tmp_supplier['drp_supplier_id'])) ? $tmp_supplier['drp_supplier_id'] : $tmp_supplier['store_id']));
  2131.                 }
  2132.             }
  2133.              else if ((3 < $max_drp_level) && (3 <= $max_drp_level - $tmp_supplier['drp_level'])) {
  2134.                 $supplier_chain = D('Store_supplier')->where(array('seller_id' => $supplier['drp_supplier_id'], 'type' => 1))->find();
  2135.                 $supply_chain = explode(',', $supplier_chain['supply_chain']);
  2136.                 $supplier['drp_supplier_id'] = $supply_chain[1];
  2137.             }
  2138.  
  2139.             $is_supplier = false;
  2140.         }
  2141.          else {
  2142.             $is_supplier = true;
  2143.         }
  2144.         $seller = M('Store')->getStore($data['seller_id']);
  2145.         if (empty($drp_level)) {
  2146.             $drp_level = $seller['drp_level'];
  2147.             --$drp_level;
  2148.         }
  2149.  
  2150.         $data['sale_profit_total'] = ((isset($data['sale_profit_total']) ? $data['sale_profit_total'] : 0));
  2151.         if (0 < $total) {
  2152.             $fx_order_info = D('Fx_order')->where(array('fx_order_id' => $fx_order_id))->find();
  2153.             $order_id = $fx_order_info['order_id'];
  2154.             $order_info = M('Order')->getOrder($data['seller_id'], $order_id);
  2155.             $fx_products = M('Order_product')->getFxProducts($order_id, $fx_order_id, $is_supplier);
  2156.             $order_trade_no = $order_info['trade_no'];
  2157.             $order_no = date('YmdHis', time()) . mt_rand(100000, 999999);
  2158.             unset($order_info['order_id']);
  2159.             $order_info['order_no'] = $order_no;
  2160.             $order_info['store_id'] = $data['supplier_id'];
  2161.             $order_info['trade_no'] = date('YmdHis', time()) . mt_rand(100000, 999999);
  2162.             $order_info['third_id'] = $third_id;
  2163.             $order_info['uid'] = $seller['uid'];
  2164.             $order_info['session_id'] = '';
  2165.             $order_info['postage'] = $fx_order_info['postage'];
  2166.             if ($data['sale_profit_total'] < 0) {
  2167.                 $order_info['sub_total'] = $fx_order_info['cost_sub_total'] - $data['sale_profit_total'];
  2168.             }
  2169.              else {
  2170.                 $order_info['sub_total'] = $fx_order_info['cost_sub_total'];
  2171.             }
  2172.             $order_info['total'] = $fx_order_info['cost_total'] - $data['sale_profit_total'];
  2173.             $order_info['status'] = 2;
  2174.             $order_info['pro_count'] = 0;
  2175.             $order_info['pro_num'] = $fx_order_info['quantity'];
  2176.             $order_info['payment_method'] = $payment_method;
  2177.             $order_info['type'] = 3;
  2178.             $order_info['add_time'] = time();
  2179.             $order_info['paid_time'] = time();
  2180.             $order_info['sent_time'] = 0;
  2181.             $order_info['cancel_time'] = 0;
  2182.             $order_info['complate_time'] = 0;
  2183.             $order_info['refund_time'] = 0;
  2184.             $order_info['star'] = 0;
  2185.             $order_info['pay_money'] = $fx_order_info['cost_total'];
  2186.             $order_info['cancel_method'] = 0;
  2187.             $order_info['float_amount'] = 0;
  2188.             $order_info['is_fx'] = 0;
  2189.             $order_info['fx_order_id'] = $fx_order_id;
  2190.             $order_info['user_order_id'] = $fx_order_info['user_order_id'];
  2191.             $order_info['suppliers'] = $fx_order_info['suppliers'];
  2192.             if (!(empty($supplier['drp_supplier_id']))) {
  2193.                 $order_info['drp_degree_id'] = Points::drpDegree($supplier['store_id']);
  2194.             }
  2195.              else {
  2196.                 $order_info['drp_degree_id'] = 0;
  2197.             }
  2198.             if ($new_order_id = M('Order')->add($order_info)) {
  2199.                 $suppliers = array();
  2200.                 $owner_products = array();
  2201.                 foreach ($fx_products as $key => $fx_product ) {
  2202.                     $tmp_product = M('Product')->get(array('product_id' => $fx_product['product_id']), 'product_id,store_id,wholesale_product_id,wholesale_price,supplier_id,is_fx,unified_price_setting,drp_level_1_cost_price,drp_level_2_cost_price,drp_level_3_cost_price,drp_level_1_price,drp_level_2_price,drp_level_3_price,cost_price,unified_profit');
  2203.                     unset($fx_product['pigcms_id']);
  2204.                     $properties = getProperty2Str($fx_product['sku_data']);
  2205.                     if (!(empty($properties))) {
  2206.                         $sku = M('Product_sku')->getSku($fx_product['product_id'], $properties);
  2207.                         $fx_product['sku_id'] = $sku['sku_id'];
  2208.                     }
  2209.                      else {
  2210.                         $fx_product['sku_id'] = 0;
  2211.                     }
  2212.                     $fx_product['pro_price'] = $fx_product['price'];
  2213.                     $fx_product['order_id'] = $new_order_id;
  2214.                     $fx_product['is_packaged'] = 0;
  2215.                     $fx_product['in_package_status'] = 0;
  2216.                     $fx_product['profit'] = 0;
  2217.                     $fx_product['drp_degree_profit'] = 0;
  2218.                     if ($tmp_product['store_id'] != $data['supplier_id']) {
  2219.                         $fx_product['supplier_id'] = $supplier['drp_supplier_id'];
  2220.                         $fx_product['is_fx'] = 1;
  2221.                         if (($drp_level == 1) && (3 < $max_drp_level)) {
  2222.                             $fx_product['supplier_id'] = $tmp_product['store_id'];
  2223.                         }
  2224.                     }
  2225.                      else {
  2226.                         $fx_product['supplier_id'] = 0;
  2227.                         $fx_product['is_fx'] = 0;
  2228.                     }
  2229.                     unset($fx_product['price']);
  2230.                     $order_product_id = M('Order_product')->add($fx_product);
  2231.                     $fx_products[$key]['is_fx'] = $tmp_product['is_fx'];
  2232.                     $fx_products[$key]['top_supplier_id'] = ((empty($tmp_product['supplier_id']) ? $tmp_product['store_id'] : 0));
  2233.                     $fx_products[$key]['drp_level_1_cost_price'] = $tmp_product['drp_level_1_cost_price'];
  2234.                     $fx_products[$key]['drp_level_2_cost_price'] = $tmp_product['drp_level_2_cost_price'];
  2235.                     $fx_products[$key]['drp_level_3_cost_price'] = $tmp_product['drp_level_3_cost_price'];
  2236.                     $fx_products[$key]['drp_level_1_price'] = $tmp_product['drp_level_1_price'];
  2237.                     $fx_products[$key]['drp_level_2_price'] = $tmp_product['drp_level_2_price'];
  2238.                     $fx_products[$key]['drp_level_3_price'] = $tmp_product['drp_level_3_price'];
  2239.                     $fx_products[$key]['cost_price'] = $tmp_product['cost_price'];
  2240.                     $fx_products[$key]['supplier_id'] = ((!(empty($tmp_product['supplier_id'])) ? $tmp_product['supplier_id'] : $tmp_product['store_id']));
  2241.                     $fx_products[$key]['source_product_id'] = $fx_product['product_id'];
  2242.                     $fx_products[$key]['wholesale_product_id'] = $tmp_product['wholesale_product_id'];
  2243.                     $fx_products[$key]['wholesale_price'] = $tmp_product['wholesale_price'];
  2244.                     $fx_products[$key]['order_product_id'] = $order_product_id;
  2245.                     $fx_products[$key]['unified_profit'] = ((!(empty($tmp_product['unified_profit'])) ? $tmp_product['unified_profit'] : 0));
  2246.                     if (!(empty($tmp_product['wholesale_product_id']))) {
  2247.                         $fx_products[$key]['wholesale_supplier_id'] = $tmp_product['supplier_id'];
  2248.                         $wholesale_supplier_id = $tmp_product['supplier_id'];
  2249.                         $fx_products[$key]['store_id'] = $tmp_product['store_id'];
  2250.                     }
  2251.  
  2252.                     if (!(empty($tmp_product)) && (empty($tmp_product['supplier_id']) || !(empty($tmp_product['wholesale_product_id']))) && ($data['supplier_id'] == $tmp_product['store_id'])) {
  2253.                         unset($fx_products[$key]);
  2254.                         if (!(empty($wholesale_supplier_id)) && !(empty($tmp_product['supplier_id']))) {
  2255.                             $wholesale_products[$wholesale_supplier_id . ',' . $tmp_product['store_id']][] = array('order_product_id' => $order_product_id, 'product_id' => $fx_product['product_id'], 'sku_id' => $fx_product['sku_id'], 'wholesale_product_id' => $tmp_product['wholesale_product_id'], 'wholesale_price' => $tmp_product['wholesale_price'], 'unified_profit' => $tmp_product['unified_profit'], 'sku_data' => $fx_product['sku_data'], 'quantity' => $fx_product['pro_num'], 'comment' => $fx_product['comment'], 'price' => $fx_product['pro_price'], 'is_comment' => $fx_product['is_comment'], 'is_present' => $fx_product['is_present'], 'user_order_id' => $fx_product['user_order_id'], 'return_status' => $fx_product['return_status'], 'cost_price' => $tmp_product['cost_price'], 'drp_level_1_cost_price' => $tmp_product['drp_level_1_cost_price']);
  2256.                         }
  2257.                     }
  2258.  
  2259.                     $suppliers[] = $tmp_product['store_id'];
  2260.                     if (empty($tmp_product['supplier_id']) && ($tmp_product['store_id'] == $data['supplier_id'])) {
  2261.                         $temp_order_product = D('Order_product')->field('sku_data,pro_num,pro_price')->where(array('order_id' => $user_order_id, 'product_id' => $tmp_product['product_id']))->find();
  2262.                         $owner_products[] = array('product_id' => $tmp_product['product_id'], 'store_id' => $data['supplier_id'], 'sku_data' => $temp_order_product['sku_data'], 'wholesale_product_id' => 0, 'supplier_id' => 0, 'pro_num' => $temp_order_product['pro_num'], 'pro_price' => $temp_order_product['pro_price']);
  2263.                     }
  2264.                 }
  2265.                 if (!(empty($owner_products))) {
  2266.                     $owner_sub_total = 0;
  2267.                     foreach ($owner_products as $owner_product ) {
  2268.                         $owner_sub_total += $owner_product['pro_price'] * $owner_product['pro_num'];
  2269.                     }
  2270.                     $postages = unserialize($order_info['fx_postage']);
  2271.                     $postage = 0;
  2272.                     if (!(empty($postages[$data['supplier_id']]))) {
  2273.                         $postage = $postages[$data['supplier_id']];
  2274.                     }
  2275.  
  2276.                     $owner_discount_amount = Order::orderDiscount($order_info, $owner_products, true);
  2277.                     $owner_total = ($owner_sub_total - $owner_discount_amount) + $postage;
  2278.                     if (0 < $owner_total) {
  2279.                         D('Order')->where(array('order_id' => $new_order_id))->data(array('sale_total' => $owner_total))->save();
  2280.                     }
  2281.                 }
  2282.  
  2283.                 $nowOrder = M('Order')->getOrder($data['supplier_id'], $new_order_id);
  2284.                 $products = M('Order_product')->getProducts($new_order_id);
  2285.                 $discount_amount = Order::orderDiscount($nowOrder, $products, true);
  2286.                 $discount_amount = ((!(empty($discount_amount)) ? $discount_amount : 0));
  2287.                 $order_total = $fx_order_info['cost_total'] - $discount_amount;
  2288.                 if ($data['sale_profit_total'] < 0) {
  2289.                     D('Order')->where(array('order_id' => $new_order_id))->data(array('total' => $order_total - $data['sale_profit_total'], 'pay_money' => $order_total - $data['sale_profit_total']))->save();
  2290.                     D('Fx_order')->where(array('fx_order_id' => $fx_order_info['fx_order_id']))->data(array('cost_sub_total' => $fx_order_info['cost_sub_total'] - $data['sale_profit_total'], 'cost_total' => $order_total - $data['sale_profit_total']))->save();
  2291.                 }
  2292.                  else {
  2293.                     D('Order')->where(array('order_id' => $new_order_id))->data(array('total' => $order_total, 'pay_money' => $order_total))->save();
  2294.                     D('Fx_order')->where(array('fx_order_id' => $fx_order_info['fx_order_id']))->data(array('cost_sub_total' => $fx_order_info['cost_sub_total'], 'cost_total' => $order_total))->save();
  2295.                 }
  2296.                 if (empty($useStorePay) || ($storePay != $data['supplier_id'])) {
  2297.                     if ($data['supplier_id'] == $top_supplier_id) {
  2298.                         if ($payment_method != 'point') {
  2299.                             M('Store')->setUnBalanceInc($data['supplier_id'], $pay_money);
  2300.                         }
  2301.                     }
  2302.                      else {
  2303.                         M('Store')->setUnBalanceInc($data['supplier_id'], $order_total - $data['sale_profit_total']);
  2304.                     }
  2305.                 }
  2306.  
  2307.                 M('Store')->setIncomeInc($data['supplier_id'], $order_total - $data['sale_profit_total']);
  2308.                 M('Fx_order')->edit(array('fx_order_id' => $fx_order_id), array('status' => 2, 'paid_time' => time()));
  2309.                 $suppliers = array_unique($suppliers);
  2310.                 $data_record = array();
  2311.                 $data_record['store_id'] = $data['supplier_id'];
  2312.                 $data_record['order_id'] = $new_order_id;
  2313.                 $data_record['order_no'] = $order_info['order_no'];
  2314.                 if ($data['sale_profit_total'] < 0) {
  2315.                     $data_record['income'] = $order_total - $data['sale_profit_total'];
  2316.                 }
  2317.                  else {
  2318.                     $data_record['income'] = $order_total;
  2319.                 }
  2320.                 $data_record['type'] = 5;
  2321.                 if (empty($supplier['drp_supplier_id '])) {
  2322.                     if (!(empty($wholesale_products))) {
  2323.                         $data_record['type'] = 6;
  2324.                     }
  2325.                      else {
  2326.                         $data_record['type'] = 1;
  2327.                     }
  2328.                 }
  2329.  
  2330.                 $data_record['balance'] = $supplier['income'];
  2331.                 $data_record['payment_method'] = $payment_method;
  2332.                 $data_record['trade_no'] = $order_info['trade_no'];
  2333.                 $data_record['add_time'] = time();
  2334.                 $data_record['status'] = 1;
  2335.                 $data_record['user_order_id'] = $order_info['user_order_id'];
  2336.                 if ($top_supplier_id != $data['supplier_id']) {
  2337.                     $data_record['supplier_id'] = $top_supplier_id;
  2338.                 }
  2339.                  else {
  2340.                     $data_record['supplier_id'] = 0;
  2341.                 }
  2342.                 $financial_record_id = D('Financial_record')->data($data_record)->add();
  2343.                 if (empty($is_supplier)) {
  2344.                     $supplier_id = $supplier['drp_supplier_id'];
  2345.                     $cost_sub_total = 0;
  2346.                     $sub_total = 0;
  2347.                     $supplier_product_sub_total = 0;
  2348.                     $supplier_product_cost_sub_total = 0;
  2349.                     $tmp_fx_products = array();
  2350.                     $tmp_drp_level = $drp_level;
  2351.                     foreach ($fx_products as $k => $fx_product ) {
  2352.                         if (!(empty($fx_product['unified_profit'])) && ($max_drp_level < 3)) {
  2353.                             $drp_level = $drp_level + 1;
  2354.                         }
  2355.                          else {
  2356.                             $drp_level = $tmp_drp_level;
  2357.                         }
  2358.                         $drp_degree_reward = Order::drpDegreeReward($top_supplier_id, $data['supplier_id'], $fx_product['product_id'], $drp_level);
  2359.                         $properties = getProperty2Str($fx_product['sku_data']);
  2360.                         $tmp_fx_product = $fx_product;
  2361.                         if (!(empty($properties))) {
  2362.                             $sku = M('Product_sku')->getSku($fx_product['product_id'], $properties);
  2363.                             if (!(empty($fx_product['is_fx']))) {
  2364.                                 $cost_price = ((0 < $sku['drp_level_' . $drp_level . '_cost_price'] ? $sku['drp_level_' . $drp_level . '_cost_price'] : $sku['price']));
  2365.                                 if (!(empty($max_drp_level)) && ($drp_level < $max_drp_level)) {
  2366.                                     $drp_level_cost_price = $sku['drp_level_' . $drp_level . '_cost_price'];
  2367.                                     $max_drp_level_cost_price = $sku['drp_level_' . $max_drp_level . '_cost_price'];
  2368.                                     if (($drp_level < 3) && ($drp_level_cost_price != $max_drp_level_cost_price) && (0 < ($max_drp_level_cost_price - $drp_level_cost_price))) {
  2369.                                         $price = ((0 < $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] : $sku['price']));
  2370.                                     }
  2371.                                      else {
  2372.                                         $price = ((0 < $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] : $sku['price']));
  2373.                                     }
  2374.                                 }
  2375.                                  else {
  2376.                                     $price = ((0 < $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $sku['drp_level_' . ($drp_level + 1) . '_cost_price'] : $sku['price']));
  2377.                                 }
  2378.                             }
  2379.                              else {
  2380.                                 $cost_price = $sku['price'];
  2381.                                 $price = $fx_product['pro_price'];
  2382.                             }
  2383.                             $sku_id = $sku['sku_id'];
  2384.                         }
  2385.                          else if (!(empty($fx_product['is_fx']))) {
  2386.                             $cost_price = ((0 < $fx_product['drp_level_' . $drp_level . '_cost_price'] ? $fx_product['drp_level_' . $drp_level . '_cost_price'] : $fx_product['pro_price']));
  2387.                             if (!(empty($max_drp_level)) && ($drp_level < $max_drp_level)) {
  2388.                                 $drp_level_cost_price = $fx_product['drp_level_' . $drp_level . '_cost_price'];
  2389.                                 $max_drp_level_cost_price = $fx_product['drp_level_' . $max_drp_level . '_cost_price'];
  2390.                                 if (($drp_level < 3) && ($drp_level_cost_price != $max_drp_level_cost_price) && (0 < ($max_drp_level_cost_price - $drp_level_cost_price))) {
  2391.                                     $price = ((0 < $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] : $fx_product['price']));
  2392.                                 }
  2393.                                  else {
  2394.                                     $price = ((0 < $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] : $fx_product['pro_price']));
  2395.                                 }
  2396.                             }
  2397.                              else {
  2398.                                 $price = ((0 < $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] ? $fx_product['drp_level_' . ($drp_level + 1) . '_cost_price'] : $sku['price']));
  2399.                             }
  2400.                         }
  2401.                          else {
  2402.                             $cost_price = $fx_product['pro_price'];
  2403.                             $price = $fx_product['pro_price'];
  2404.                         }
  2405.                         $pro_profit = $price - $cost_price;
  2406.                         if (!(empty($subscribed_discounts))) {
  2407.                             if ($properties) {
  2408.                                 $subscribed_discount = ((!(empty($subscribed_discounts[$properties . ':' . $fx_product['product_id']])) ? $subscribed_discounts[$properties . ':' . $fx_product['product_id']] : 0));
  2409.                             }
  2410.                              else {
  2411.                                 $subscribed_discount = ((!(empty($subscribed_discounts[$fx_product['product_id']])) ? $subscribed_discounts[$fx_product['product_id']] : 0));
  2412.                             }
  2413.                             $cost_price -= $subscribed_discount;
  2414.                         }
  2415.  
  2416.                         $drp_degree_reward_profit = 0;
  2417.                         $tmp_data = array();
  2418.                         $tmp_data['drp_degree_profit'] = $drp_degree_reward_profit;
  2419.                         $drp_degree_reward_profit = $pro_profit * $drp_degree_reward;
  2420.                         if ($properties) {
  2421.                             $drp_degree_reward_profit += ((!(empty($drp_degree_reward_profits[$properties . ':' . $fx_product['product_id']])) ? $drp_degree_reward_profits[$properties . ':' . $fx_product['product_id']] : 0));
  2422.                             $drp_degree_reward_profits[$properties . ':' . $fx_product['product_id']] += $pro_profit * $drp_degree_reward;
  2423.                         }
  2424.                          else {
  2425.                             $drp_degree_reward_profit += ((!(empty($drp_degree_reward_profits[$fx_product['product_id']])) ? $drp_degree_reward_profits[$fx_product['product_id']] : 0));
  2426.                             $drp_degree_reward_profits[$fx_product['product_id']] += $pro_profit * $drp_degree_reward;
  2427.                         }
  2428.                         $cost_price -= $drp_degree_reward_profit;
  2429.                         $price -= $drp_degree_reward_profit;
  2430.                         if (!(empty($supplier['drp_degree_id']))) {
  2431.                             $tmp_data['drp_degree_profit'] = $pro_profit * $drp_degree_reward;
  2432.                             $pro_profit += $pro_profit * $drp_degree_reward;
  2433.                         }
  2434.  
  2435.                         $tmp_data['profit'] = $pro_profit;
  2436.                         D('Order_product')->where(array('pigcms_id' => $fx_product['order_product_id']))->data($tmp_data)->save();
  2437.                         $cost_sub_total += $cost_price * $fx_product['pro_num'];
  2438.                         $sub_total += $price * $fx_product['pro_num'];
  2439.                         if (!(empty($top_supplier_id)) && ($top_supplier_id == $fx_product['top_supplier_id'])) {
  2440.                             $supplier_product_sub_total += $price * $fx_product['pro_num'];
  2441.                             $supplier_product_cost_sub_total += $cost_price * $fx_product['pro_num'];
  2442.                         }
  2443.  
  2444.                         if (($max_drp_level < 3) && !(empty($fx_product['unified_profit']))) {
  2445.                             $cost_price = $fx_product['price'] - $price - $cost_price;
  2446.                         }
  2447.  
  2448.                         $tmp_fx_product['product_id'] = $fx_product['product_id'];
  2449.                         $tmp_fx_product['price'] = $price;
  2450.                         $tmp_fx_product['cost_price'] = $cost_price;
  2451.                         $tmp_fx_product['sku_id'] = $sku_id;
  2452.                         $tmp_fx_product['original_product_id'] = $fx_product['product_id'];
  2453.                         $tmp_fx_products[] = $tmp_fx_product;
  2454.                         $fx_products[$k]['cost_price'] = $cost_price;
  2455.                     }
  2456.                     if (!(empty($tmp_fx_products))) {
  2457.                         $fx_order_no = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(100000, 999999);
  2458.                         $postage = ((!(empty($order_info['postage'])) ? $order_info['postage'] : 0));
  2459.                         $data2 = array('fx_order_no' => $fx_order_no, 'uid' => $order_info['uid'], 'order_id' => $new_order_id, 'order_no' => $order_info['order_no'], 'fx_trade_no' => $data['trade_no'], 'supplier_id' => (($drp_level == 1) && (3 < $max_drp_level) ? $supplier_id : $data['drp_supplier_id']), 'store_id' => $data['supplier_id'], 'quantity' => $fx_order_info['quantity'], 'sub_total' => $sub_total, 'cost_sub_total' => $cost_sub_total, 'postage' => $postage, 'total' => $sub_total + $postage, 'cost_total' => $cost_sub_total + $postage, 'delivery_user' => $order_info['address_user'], 'delivery_tel' => $order_info['address_tel'], 'delivery_address' => $order_info['address'], 'add_time' => time(), 'user_order_id' => $order_info['user_order_id'], 'fx_postage' => $order_info['fx_postage'], 'suppliers' => $order_info['suppliers']);
  2460.                         if ($fx_order_id = M('Fx_order')->add($data2)) {
  2461.                             foreach ($tmp_fx_products as $tmp_fx_product ) {
  2462.                                 if (!(empty($tmp_fx_product['product_id']))) {
  2463.                                     M('Fx_order_product')->add(array('fx_order_id' => $fx_order_id, 'product_id' => $tmp_fx_product['product_id'], 'source_product_id' => $tmp_fx_product['source_product_id'], 'price' => $tmp_fx_product['price'], 'cost_price' => $tmp_fx_product['cost_price'], 'quantity' => $tmp_fx_product['pro_num'], 'sku_id' => $tmp_fx_product['sku_id'], 'sku_data' => $tmp_fx_product['sku_data'], 'comment' => $tmp_fx_product['comment']));
  2464.                                 }
  2465.                             }
  2466.                         }
  2467.  
  2468.                         if (!(empty($financial_record_id)) && (0 < $pro_profit)) {
  2469.                             D('Financial_record')->where(array('pigcms_id' => $financial_record_id))->data(array('profit' => $pro_profit))->save();
  2470.                         }
  2471.  
  2472.                         if (M('Store')->setUnBalanceDec($data['seller_id'], $order_total) && M('Store')->setIncomeDec($data['seller_id'], $order_total)) {
  2473.                             $order_no = $order_info['order_no'];
  2474.                             $data_record = array();
  2475.                             $data_record['store_id'] = $data['seller_id'];
  2476.                             $data_record['order_id'] = $order_id;
  2477.                             $data_record['order_no'] = $order_no;
  2478.                             if ($data['sale_profit_total'] < 0) {
  2479.                                 $data_record['income'] = -$order_total - $data['sale_profit_total'];
  2480.                             }
  2481.                              else {
  2482.                                 $data_record['income'] = -$order_total;
  2483.                             }
  2484.                             $data_record['type'] = 5;
  2485.                             $data_record['balance'] = $seller['income'];
  2486.                             $data_record['payment_method'] = $payment_method;
  2487.                             $data_record['trade_no'] = $order_trade_no;
  2488.                             $data_record['add_time'] = time();
  2489.                             $data_record['status'] = 1;
  2490.                             $data_record['user_order_id'] = $order_info['user_order_id'];
  2491.                             if ($top_supplier_id != $data['seller_id']) {
  2492.                                 $data_record['supplier_id'] = $top_supplier_id;
  2493.                             }
  2494.                              else {
  2495.                                 $data_record['supplier_id'] = 0;
  2496.                             }
  2497.                             D('Financial_record')->data($data_record)->add();
  2498.                         }
  2499.  
  2500.                         if (($drp_level == 1) && (3 < $max_drp_level)) {
  2501.                             $supplier_id = $top_supplier_id;
  2502.                             $current_supplier = M('Store')->getStore($supplier_id, 'income');
  2503.                             $fx_order_info = M('Fx_order')->getOrder($data['supplier_id'], $fx_order_id);
  2504.                             $order_id = $fx_order_info['order_id'];
  2505.                             $order_info = M('Order')->getOrder($data['supplier_id'], $order_id);
  2506.                             unset($order_info['order_id']);
  2507.                             $order_info['order_no'] = date('YmdHis', time()) . mt_rand(100000, 999999);
  2508.                             $order_info['store_id'] = $supplier_id;
  2509.                             $order_info['trade_no'] = date('YmdHis', time()) . mt_rand(100000, 999999);
  2510.                             $order_info['third_id'] = $third_id;
  2511.                             $order_info['uid'] = $supplier['uid'];
  2512.                             $order_info['session_id'] = '';
  2513.                             $order_info['postage'] = $fx_order_info['postage'];
  2514.                             $order_info['sub_total'] = $fx_order_info['cost_sub_total'];
  2515.                             $order_info['total'] = $fx_order_info['cost_total'];
  2516.                             $order_info['status'] = 2;
  2517.                             $order_info['pro_count'] = 0;
  2518.                             $order_info['pro_num'] = $fx_order_info['quantity'];
  2519.                             $order_info['payment_method'] = $payment_method;
  2520.                             $order_info['type'] = 3;
  2521.                             $order_info['add_time'] = time();
  2522.                             $order_info['paid_time'] = time();
  2523.                             $order_info['sent_time'] = 0;
  2524.                             $order_info['cancel_time'] = 0;
  2525.                             $order_info['complate_time'] = 0;
  2526.                             $order_info['refund_time'] = 0;
  2527.                             $order_info['star'] = 0;
  2528.                             $order_info['pay_money'] = $fx_order_info['cost_total'];
  2529.                             $order_info['cancel_method'] = 0;
  2530.                             $order_info['float_amount'] = 0;
  2531.                             $order_info['is_fx'] = 0;
  2532.                             $order_info['fx_order_id'] = $fx_order_id;
  2533.                             $order_info['user_order_id'] = $fx_order_info['user_order_id'];
  2534.                             $order_info['suppliers'] = $fx_order_info['suppliers'];
  2535.                             $order_info['drp_degree_id'] = 0;
  2536.                             if ($new_order_id = M('Order')->add($order_info)) {
  2537.                                 foreach ($fx_products as $fx_product ) {
  2538.                                     $tmp_product = M('Product')->get(array('product_id' => $fx_product['product_id']), 'product_id,store_id,wholesale_product_id,wholesale_price,supplier_id,unified_price_setting,drp_level_1_cost_price,drp_level_2_cost_price,drp_level_3_cost_price,drp_level_1_price,drp_level_2_price,drp_level_3_price,cost_price,unified_profit');
  2539.                                     $fx_product['pro_price'] = $fx_product['cost_price'];
  2540.                                     $fx_product['order_id'] = $new_order_id;
  2541.                                     $fx_product['is_packaged'] = 0;
  2542.                                     $fx_product['in_package_status'] = 0;
  2543.                                     if (empty($fx_product['wholesale_product_id'])) {
  2544.                                         $fx_product['is_fx'] = 0;
  2545.                                         $fx_product['supplier_id'] = 0;
  2546.                                         unset($fx_product['wholesale_product_id']);
  2547.                                     }
  2548.                                      else {
  2549.                                         $fx_product['is_fx'] = 0;
  2550.                                         $fx_product['original_product_id'] = $fx_product['wholesale_product_id'];
  2551.                                     }
  2552.                                     $wholesale_product_id = ((!(empty($fx_product['wholesale_product_id'])) ? $fx_product['wholesale_product_id'] : 0));
  2553.                                     $store_id = $fx_product['store_id'];
  2554.                                     $cost_price = $fx_product['cost_price'];
  2555.                                     $drp_level_1_cost_price = $fx_product['drp_level_1_cost_price'];
  2556.                                     $wholesale_price = $fx_product['wholesale_price'];
  2557.                                     unset($fx_product['is_fx'], $fx_product['top_supplier_id'], $fx_product['store_id'], $fx_product['pigcms_id'], $fx_product['order_product_id'], $fx_product['price'], $fx_product['profit'], $fx_product['unified_price_setting'], $fx_product['source_product_id'], $fx_product['wholesale_product_id'], $fx_product['wholesale_price'], $fx_product['cost_price'], $fx_product['drp_level_1_cost_price'], $fx_product['drp_level_2_cost_price'], $fx_product['drp_level_3_cost_price'], $fx_product['drp_level_1_price'], $fx_product['drp_level_2_price'], $fx_product['drp_level_3_price'], $fx_product['unified_profit']);
  2558.                                     if (!(empty($fx_product['wholesale_supplier_id']))) {
  2559.                                         $wholesale_supplier_id = $fx_product['wholesale_supplier_id'];
  2560.                                         unset($fx_product['wholesale_supplier_id']);
  2561.                                     }
  2562.  
  2563.                                     $order_product_id = M('Order_product')->add($fx_product);
  2564.                                     if (!(empty($wholesale_supplier_id)) && !(empty($tmp_product['supplier_id']))) {
  2565.                                         $wholesale_products[$wholesale_supplier_id . ',' . $store_id][] = array('order_product_id' => $order_product_id, 'product_id' => $fx_product['product_id'], 'wholesale_product_id' => $wholesale_product_id, 'wholesale_price' => $wholesale_price, 'sku_id' => $fx_product['sku_id'], 'sku_data' => $fx_product['sku_data'], 'quantity' => $fx_product['pro_num'], 'comment' => $fx_product['comment'], 'price' => $fx_product['pro_price'], 'is_comment' => $fx_product['is_comment'], 'is_present' => $fx_product['is_present'], 'user_order_id' => $fx_product['user_order_id'], 'return_status' => $fx_product['return_status'], 'cost_price' => $cost_price, 'drp_level_1_cost_price' => $drp_level_1_cost_price);
  2566.                                     }
  2567.  
  2568.                                     if (empty($tmp_product['supplier_id']) && ($tmp_product['store_id'] == $supplier_id)) {
  2569.                                         $temp_order_product = D('Order_product')->field('sku_data,pro_num,pro_price')->where(array('order_id' => $fx_order_info['user_order_id'], 'product_id' => $tmp_product['product_id']))->find();
  2570.                                         $owner_products[] = array('product_id' => $tmp_product['product_id'], 'store_id' => $supplier_id, 'sku_data' => $temp_order_product['sku_data'], 'wholesale_product_id' => 0, 'supplier_id' => 0, 'pro_num' => $temp_order_product['pro_num'], 'pro_price' => $temp_order_product['pro_price']);
  2571.                                     }
  2572.                                 }
  2573.                                 if (!(empty($owner_products))) {
  2574.                                     $owner_sub_total = 0;
  2575.                                     foreach ($owner_products as $owner_product ) {
  2576.                                         $owner_sub_total += $owner_product['pro_price'] * $owner_product['pro_num'];
  2577.                                     }
  2578.                                     $postages = unserialize($order_info['fx_postage']);
  2579.                                     $postage = 0;
  2580.                                     if (!(empty($postages[$supplier_id]))) {
  2581.                                         $postage = $postages[$supplier_id];
  2582.                                     }
  2583.  
  2584.                                     $owner_discount_amount = Order::orderDiscount($order_info, $owner_products, true);
  2585.                                     $owner_total = ($owner_sub_total - $owner_discount_amount) + $postage;
  2586.                                     if (0 < $owner_total) {
  2587.                                         D('Order')->where(array('order_id' => $new_order_id))->data(array('sale_total' => $owner_total))->save();
  2588.                                     }
  2589.                                 }
  2590.  
  2591.                                 $nowOrder = M('Order')->getOrder($supplier_id, $new_order_id);
  2592.                                 $products = M('Order_product')->getProducts($new_order_id);
  2593.                                 $discount_amount = Order::orderDiscount($nowOrder, $products, true);
  2594.                                 $order_total = $fx_order_info['cost_total'] - $discount_amount;
  2595.                                 D('Order')->where(array('order_id' => $new_order_id))->data(array('total' => $order_total, 'pay_money' => $order_total))->save();
  2596.                                 D('Fx_order')->where(array('fx_order_id' => $fx_order_id))->data(array('cost_total' => $order_total))->save();
  2597.                                 M('Fx_order')->edit(array('fx_order_id' => $fx_order_id), array('status' => 2, 'paid_time' => time(), 'supplier_id' => $supplier_id));
  2598.                                 if (empty($order_info['useStorePay']) || ($order_info['storePay'] != $supplier_id)) {
  2599.                                     M('Store')->setUnBalanceInc($supplier_id, $pay_money);
  2600.                                 }
  2601.  
  2602.                                 M('Store')->setIncomeInc($supplier_id, $order_total);
  2603.                                 $data_record = array();
  2604.                                 $data_record['store_id'] = $supplier_id;
  2605.                                 $data_record['order_id'] = $new_order_id;
  2606.                                 $data_record['order_no'] = $order_info['order_no'];
  2607.                                 $data_record['income'] = $order_total;
  2608.                                 $data_record['type'] = 5;
  2609.                                 $data_record['balance'] = $current_supplier['income'];
  2610.                                 $data_record['payment_method'] = $payment_method;
  2611.                                 $data_record['trade_no'] = $order_info['trade_no'];
  2612.                                 $data_record['add_time'] = time();
  2613.                                 $data_record['status'] = 1;
  2614.                                 $data_record['user_order_id'] = $order_info['user_order_id'];
  2615.                                 if ($top_supplier_id != $supplier_id) {
  2616.                                     $data_record['supplier_id'] = $top_supplier_id;
  2617.                                 }
  2618.                                  else {
  2619.                                     $data_record['supplier_id'] = 0;
  2620.                                 }
  2621.                                 $financial_record_id = D('Financial_record')->data($data_record)->add();
  2622.                                 if (M('Store')->setUnBalanceDec($data['supplier_id'], $order_total) && M('Store')->setIncomeDec($data['supplier_id'], $order_total)) {
  2623.                                     $data_record = array();
  2624.                                     $data_record['store_id'] = $data['supplier_id'];
  2625.                                     $data_record['order_id'] = $order_id;
  2626.                                     $data_record['order_no'] = $order_no;
  2627.                                     $data_record['income'] = -$order_total;
  2628.                                     $data_record['type'] = 5;
  2629.                                     $data_record['balance'] = $supplier['income'];
  2630.                                     $data_record['payment_method'] = $payment_method;
  2631.                                     $data_record['trade_no'] = $order_trade_no;
  2632.                                     $data_record['add_time'] = time();
  2633.                                     $data_record['status'] = 1;
  2634.                                     $data_record['user_order_id'] = $fx_order_info['user_order_id'];
  2635.                                     if ($top_supplier_id != $data['supplier_id']) {
  2636.                                         $data_record['supplier_id'] = $top_supplier_id;
  2637.                                     }
  2638.                                      else {
  2639.                                         $data_record['supplier_id'] = 0;
  2640.                                     }
  2641.                                     D('Financial_record')->data($data_record)->add();
  2642.                                 }
  2643.                             }
  2644.                         }
  2645.                     }
  2646.                 }
  2647.                  else if ($max_drp_level <= 3) {
  2648.                     if (M('Store')->setUnBalanceDec($data['seller_id'], $order_total) && M('Store')->setIncomeDec($data['seller_id'], $order_total)) {
  2649.                         $order_no = $order_info['order_no'];
  2650.                         $data_record = array();
  2651.                         $data_record['store_id'] = $data['seller_id'];
  2652.                         $data_record['order_id'] = $order_id;
  2653.                         $data_record['order_no'] = $order_no;
  2654.                         if ($data['sale_profit_total'] < 0) {
  2655.                             $data_record['income'] = -$order_total - $data['sale_profit_total'];
  2656.                         }
  2657.                          else {
  2658.                             $data_record['income'] = -$order_total;
  2659.                         }
  2660.                         $data_record['type'] = 5;
  2661.                         $data_record['balance'] = $seller['income'];
  2662.                         $data_record['payment_method'] = $payment_method;
  2663.                         $data_record['trade_no'] = $order_trade_no;
  2664.                         $data_record['add_time'] = time();
  2665.                         $data_record['status'] = 1;
  2666.                         $data_record['user_order_id'] = $order_info['user_order_id'];
  2667.                         if ($top_supplier_id != $data['seller_id']) {
  2668.                             $data_record['supplier_id'] = $top_supplier_id;
  2669.                         }
  2670.                          else {
  2671.                             $data_record['supplier_id'] = 0;
  2672.                         }
  2673.                         D('Financial_record')->data($data_record)->add();
  2674.                     }
  2675.                 }
  2676.  
  2677.                 if (!(empty($wholesale_products))) {
  2678.                     foreach ($wholesale_products as $tmp_key => $tmp_wholesale_products ) {
  2679.                         $keys = explode(',', $tmp_key);
  2680.                         $supplier_id = $keys[0];
  2681.                         $seller_id = $keys[1];
  2682.                         $this->_ws_order($user_order_id, $supplier_id, $seller_id, $tmp_wholesale_products, true, $useStorePay);
  2683.                     }
  2684.                 }
  2685.             }
  2686.         }
  2687.     }
  2688.     private function _dealer_pay_callback($pay_money, $nowOrder, $nowStore)
  2689.     {
  2690.         $fx_order = D('Fx_order')->field('store_id,order_id')->where(array('fx_order_id' => $nowOrder['fx_order_id']))->find();
  2691.         $supplier_id = intval($nowOrder['store_id']);
  2692.         $dealer_id = intval($fx_order['store_id']);
  2693.         $dealer_order_id = intval($fx_order['order_id']);
  2694.         if (!(empty($dealer_id))) {
  2695.             D('Supp_dis_relation')->where(array('distributor_id' => $dealer_id, 'supplier_id' => $supplier_id))->setDec('not_paid', $pay_money);
  2696.             D('Supp_dis_relation')->where(array('distributor_id' => $dealer_id, 'supplier_id' => $supplier_id))->setInc('paid', $pay_money);
  2697.             D('Supp_dis_relation')->where(array('distributor_id' => $dealer_id, 'supplier_id' => $supplier_id))->setInc('sales', $pay_money);
  2698.         }
  2699.  
  2700.         M('Store')->setIncomeInc($supplier_id, $pay_money);
  2701.         if (empty($nowOrder['useStorePay'])) {
  2702.             M('Store')->setUnBalanceInc($supplier_id, $pay_money);
  2703.             M('Common_data')->setData('total', $pay_money);
  2704.         }
  2705.          else {
  2706.             D('Store')->where(array('store_id' => $supplier_id))->setInc('store_pay_income', $pay_money);
  2707.         }
  2708.         $dealer_profit = D('Financial_record')->field('profit')->where(array(
  2709.     'order_id'    => $dealer_order_id,
  2710.     'supplier_id' => $supplier_id,
  2711.     'income'      => array('<', 0)
  2712.     ))->find();
  2713.         $dealer_profit = ((!(empty($dealer_profit['profit'])) ? $dealer_profit['profit'] : 0));
  2714.         if (!(empty($dealer_profit))) {
  2715.             D('Supp_dis_relation')->where(array('distributor_id' => $dealer_id, 'supplier_id' => $supplier_id))->setInc('profit', $dealer_profit);
  2716.         }
  2717.  
  2718.         $data_record = array();
  2719.         $data_record['store_id'] = $supplier_id;
  2720.         $data_record['order_id'] = $nowOrder['order_id'];
  2721.         $data_record['order_no'] = $nowOrder['order_no'];
  2722.         $data_record['income'] = $pay_money;
  2723.         $data_record['type'] = 1;
  2724.         $data_record['balance'] = $nowStore['income'];
  2725.         $data_record['payment_method'] = 'balance';
  2726.         $data_record['trade_no'] = $nowOrder['trade_no'];
  2727.         $data_record['add_time'] = time();
  2728.         $data_record['status'] = 1;
  2729.         $data_record['user_order_id'] = $nowOrder['user_order_id'];
  2730.         if (!(empty($nowOrder['useStorePay'])) && ($nowOrder['storePay'] == $supplier_id)) {
  2731.             $data_record['storeOwnPay'] = 1;
  2732.         }
  2733.  
  2734.         D('Financial_record')->data($data_record)->add();
  2735.     }
  2736.     public function _activity_pay_callback($nowOrder, $out_trade_no, $payment_method)
  2737.     {
  2738.         $bak = unserialize($nowOrder['activity_data']);
  2739.         $bak['from'] = str_replace('pigcms_', '', $bak['from']);
  2740.         if ($bak && isset($bak['from'])) {
  2741.             $apiUrl = rtrim(option('config.syn_domain'), '/') . '/';
  2742.             $salt = ((option('config.encryption') ? option('config.encryption') : 'pigcms'));
  2743.             $postData = array(
  2744.                 'option'        => array(
  2745.                     'where' => array('orderid' => $bak['orderid'])
  2746.                     ),
  2747.                 'data'          => array('paid' => '1', 'paytype' => $out_trade_no),
  2748.                 'from'          => $bak['from'],
  2749.                 'transactionid' => $payment_method,
  2750.                 'model'         => 'Nothing',
  2751.                 'token'         => $bak['token']
  2752.                 );
  2753.             $postData['sign'] = getSign($postData, $salt);
  2754.             $url = $apiUrl . '/index.php?g=Home&m=Auth&a=order';
  2755.             api_curl_post($url, $postData);
  2756.         }
  2757.     }
  2758. }
  2759.  
  2760. ?>
  2761. wxapp.class.php页面

  2762. <?php
  2763. class Wxapp
  2764. {
  2765.     public $payinfo;
  2766.     public function __construct($payinfo)
  2767.     {
  2768.         $this->payinfo = $payinfo;
  2769.     }
  2770.     public function qrcode_pay()
  2771.     {
  2772.         $api = 'https://pay.swiftpass.cn/pay/gateway';
  2773.         $data = [
  2774.             'service'=>'pay.weixin.native',
  2775.             'mch_id'=>$this->payinfo['mchid'],
  2776.             'out_trade_no'=>$this->payinfo['order_no'],
  2777.             'body'=>$this->payinfo['body'],
  2778.             'total_fee'=>$this->payinfo['total_fee']*100,//单位分
  2779.             'mch_create_ip'=>$this->getIp(),
  2780.             'notify_url'=>option('config.site_url').'/wap/paynotice.php',
  2781.             'nonce_str'=>$this->randomkey(32),
  2782.         ];
  2783.         $xml = $this->arr_xml($data);
  2784.         $ret = $this->post($api,$xml);
  2785.         $return = json_decode(json_encode(simplexml_load_string($ret, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  2786.         return $return;
  2787.     }
  2788. //接口要传的数据
  2789.     public function pay()
  2790.     {
  2791.         $api = 'https://pay.swiftpass.cn/pay/gateway';
  2792.         /*$out_trade_no = @date(Ymd).rand(111111,9999999);*/
  2793.         $nonce_str=uniqid();
  2794.         $data = [
  2795.             'service'=>'pay.weixin.jspay',
  2796.             'mch_id'=>$this->payinfo['mchid'],
  2797.             'is_raw'=>'1',
  2798.             'nonce_str'=>$this->randomkey(32),
  2799.             'out_trade_no'=>$this->payinfo['order_no'],
  2800.             'body'=>$this->payinfo['body'],
  2801.             'sub_openid'=>$this->payinfo['openid'],
  2802.             'total_fee'=>$this->payinfo['total_fee']*100,//单位分
  2803.             'mch_create_ip'=>$this->getIp(),
  2804.             //'sign_type'=>'RSA_1_256',
  2805.             'notify_url'=>option('config.site_url').'/wap/paynotice.php',//回调
  2806.         ];
  2807.         if($this->payinfo['type'] == 'quickStart'){
  2808.             $data['is_minipg'] = '1';
  2809.         }
  2810.         $data['sub_appid'] = $this->payinfo['appid'];
  2811.         $xml = $this->arr_xml($data);file_put_contents('./pay1.txt',$xml);
  2812.         $ret = $this->post($api,$xml);
  2813.         $return = json_decode(json_encode(simplexml_load_string($ret, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  2814.         if($return['status']==0 && $return['result_code']==0){
  2815.             /*$wxpay = json_decode($return['pay_info'], true);
  2816.             $payinfos = [];
  2817.             $payinfos['appId'] = $wxpay['appId'];
  2818.             $payinfos['timeStamp'] = $wxpay['timeStamp'];
  2819.             $payinfos['nonceStr'] = $wxpay['nonceStr'];
  2820.             $payinfos['package'] = $wxpay['package'];
  2821.             $payinfos['signType'] = $wxpay['signType'];
  2822.             $payinfos['paySign'] = $wxpay['paySign'];
  2823.             return array('err_code'=>0,'pay_data'=>$this->json_en($payinfos));*/
  2824.             return array('err_code'=>0,'pay_data'=>$return['pay_info']);
  2825.         }else{
  2826.             json_return(10000, $return['message']);
  2827.         }
  2828.     }
  2829.  
  2830.     public function randomkey($length)
  2831.     {
  2832.        $pattern = '1234567890abcdefghijklmnopqrstuvwxyz
  2833.                    ABCDEFGHIJKLOMNOPQRSTUVWXYZ';
  2834.         for($i=0;$i<$length;$i++)
  2835.         {
  2836.             $key .= $pattern{mt_rand(0,35)};    //生成php随机数
  2837.         }
  2838.         return $key;
  2839.     }
  2840.     public function json_en($response){
  2841.         $data = "{";
  2842.         foreach ($response as $k => $v) {
  2843.             if($k == 'timestamp'){
  2844.                 $data.='"'.$k.'":'.$v.',';
  2845.             }else{
  2846.                 $data.='"'.$k.'":"'.$v.'",';
  2847.             }
  2848.         }
  2849.         $data = substr($data,0,-1);
  2850.         $data = $data."}";
  2851.         return $data;
  2852.     }
  2853.     function createRSASign($signPars) {
  2854.         $signPars = substr($signPars, 0, strlen($signPars) - 1);
  2855.         $signtype = isset($signtype)?$signtype:'RSA_1_256';
  2856.         $res = openssl_get_privatekey($this->payinfo['pay_secret']);
  2857.         if ($signtype == 'RSA_1_1') {
  2858.             openssl_sign($signPars, $sign, $res);
  2859.         } else if ($signtype == 'RSA_1_256') {
  2860.             openssl_sign($signPars, $sign, $res, OPENSSL_ALGO_SHA256);
  2861.         }
  2862.         openssl_free_key($res);
  2863.         $sign = base64_encode($sign);
  2864.         return $sign;
  2865.     }
  2866.     public function arr_xml($data)
  2867.     {
  2868.         if(strlen($this->payinfo['pay_secret']) > 40){
  2869.             $data['sign_type'] = 'RSA_1_256';
  2870.         }
  2871.         ksort($data);//以键名排序
  2872.         $string='';
  2873.         foreach($data as $k=>$v){
  2874.             $string.="$k=$v&";
  2875.         }
  2876.         if(!$data['sign_type']){
  2877.             $string.='key='.$this->payinfo['pay_secret'];
  2878.             $data['sign'] = strtoupper(md5($string));
  2879.         }else{
  2880.             $data['sign'] = $this->createRSASign($string);
  2881.         }
  2882.         $xml='<xml>';
  2883.         foreach($data as $key=>$val){
  2884.             if (is_numeric($val)){
  2885.                 $xml.="<".$key.">".$val."</".$key.">";
  2886.             }else{
  2887.                 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
  2888.             }
  2889.         }
  2890.         $xml.='</xml>';
  2891.         return $xml;
  2892.     }
  2893.     public function getIp()
  2894.     {
  2895.         $ip = "Unknown";
  2896.         if (isset($_SERVER["HTTP_X_REAL_IP"]) && !empty($_SERVER["HTTP_X_REAL_IP"])) {
  2897.             $ip = $_SERVER["HTTP_X_REAL_IP"];
  2898.         }
  2899.         elseif (isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) && !empty($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
  2900.             $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
  2901.         }
  2902.         elseif (isset($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) && !empty($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
  2903.             $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
  2904.         }
  2905.         elseif (isset($HTTP_SERVER_VARS["REMOTE_ADDR"]) && !empty($HTTP_SERVER_VARS["REMOTE_ADDR"])) {
  2906.             $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
  2907.         }
  2908.         elseif (getenv("HTTP_X_FORWARDED_FOR")) {
  2909.             $ip = getenv("HTTP_X_FORWARDED_FOR");
  2910.         }
  2911.         elseif (getenv("HTTP_CLIENT_IP")) {
  2912.             $ip = getenv("HTTP_CLIENT_IP");
  2913.         }
  2914.         elseif (getenv("REMOTE_ADDR")) {
  2915.             $ip = getenv("REMOTE_ADDR");
  2916.         }
  2917.         return $ip;
  2918.     }
  2919.     public function post($url, $data, $isHttps = TRUE)
  2920.     {
  2921.         // 创建curl对象
  2922.         $ch = curl_init ();
  2923.         // 配置这个对象
  2924.         curl_setopt ( $ch, CURLOPT_URL, $url);  // 请求的URL地址
  2925.         curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
  2926.         if($isHttps)
  2927.         {
  2928.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  2929.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
  2930.         }
  2931.         curl_setopt ( $ch, CURLOPT_POST, true);  // 是否是POST请求
  2932.         curl_setopt ( $ch, CURLOPT_HEADER, 0);  // 去掉HTTP协议头
  2933.         curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);  // 返回接口的结果,而不是输出
  2934.         curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data);  // 提交的数据
  2935.         // 发出请求
  2936.         $return = curl_exec ( $ch );
  2937.         // 关闭对象
  2938.         curl_close ( $ch );
  2939.         // 返回数据
  2940.         return $return;
  2941.     }
  2942. }
  2943.  

  2944. app.sdk.js文件

  2945. function is_kingkr_obj() {
  2946.     var type = sdk_judge();
  2947.     if (type.ios == true) {
  2948.         if (typeof window.webkit == 'undefined' || typeof window.webkit.messageHandlers.local_kingkr_obj == 'undefined') {
  2949.             return false
  2950.         } else {
  2951.             return true
  2952.         }
  2953.     }else{
  2954.         if (typeof local_kingkr_obj == 'undefined') {
  2955.             return false
  2956.         } else {
  2957.             return true
  2958.         }
  2959.     }
  2960. }
  2961. function share(){
  2962.     switch(arguments[0]){
  2963.         case 'share':
  2964.             shareOnly(arguments[1],arguments[2],arguments[3],arguments[4]);
  2965.         break;
  2966.         case 'image':
  2967.             shareImage(arguments[1]);
  2968.         break;
  2969.         case 'screenshot':
  2970.             shareCutImage();
  2971.         break;
  2972.         default:
  2973.             shareOnly(arguments[0],arguments[1],arguments[2],arguments[3]);
  2974.         break;
  2975.     }
  2976. }
  2977. function shareOnly(content, imageurl, targetUrl, title) {
  2978.     if(!sdk_checkinside())return false;
  2979.     type = sdk_judge();
  2980.     if (type.ios == true) {
  2981.         var message = { 'methodName' : 'share', 'content': content,'imageurl': imageurl,'targetUrl': targetUrl,'title': title, 'callbackMethod': 'shareCallback' };
  2982.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  2983.     }else{
  2984.         var share = "{\"content\":\"" + content + "\",\"imageurl\": \"" + imageurl + "\",\"targetUrl\": \"" + targetUrl + "\",\"title\": \"" + title + "\"}";
  2985.         local_kingkr_obj.share(share)
  2986.     }
  2987. }
  2988. function shareImage(imageurl) {
  2989.     if(!sdk_checkinside())return false;
  2990.     type = sdk_judge();
  2991.     if (type.ios == true) {
  2992.         var message = { 'methodName' : 'shareImage', 'imageurl': imageurl, 'callbackMethod': 'shareCallback' };
  2993.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  2994.     }else{
  2995.         var share = "{\"content\":\"\",\"imageurl\": \"" + imageurl + "\",\"targetUrl\": \"\",\"title\": \"\"}";
  2996.         local_kingkr_obj.shareImage(share)
  2997.     }
  2998. }
  2999. function shareCutImage() {
  3000.     if(!sdk_checkinside())return false;
  3001.     type = sdk_judge();
  3002.     if (type.ios == true) {
  3003.         var message = { 'methodName' : 'shareCutImage', 'callbackMethod': 'shareCallback' };
  3004.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3005.     }else{
  3006.         var share = "{\"content\":\"\",\"imageurl\": \"\",\"targetUrl\": \"\",\"title\": \"\"}";
  3007.         local_kingkr_obj.shareCutImage(share)
  3008.     }
  3009. }
  3010. function openDownLoad() {
  3011.     if(!sdk_checkinside())return false;
  3012.     type = sdk_judge();
  3013.     if (type.ios == true) {
  3014.     }else{
  3015.         local_kingkr_obj.openDownLoadFile();
  3016.     }
  3017. }
  3018. function downloadFile(url){
  3019.     if(!sdk_checkinside())return false;
  3020.     type = sdk_judge();
  3021.     if (type.ios == true) {
  3022.     }else{
  3023.         local_kingkr_obj.downloadFile(url);
  3024.     }
  3025. }
  3026. function login(platform, forwardurl, callbackMethod) {
  3027.     if(!sdk_checkinside())return false;
  3028.     type = sdk_judge();
  3029.     if (type.ios == true) {
  3030.         var message ={'methodName':'login','platform':platform,'forwardurl':forwardurl,'callbackMethod':callbackMethod};
  3031.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3032.     }else{
  3033.         var login = "{\"platform\":\"" + platform + "\",\"forwardurl\":\"" + forwardurl + "\",\"callbackMethod\":\"" + callbackMethod + "\"}";
  3034.         local_kingkr_obj.login(login)
  3035.     }
  3036. }
  3037. function pay_Type(order,paytype,callbackMethod) {
  3038.     if(!sdk_checkinside())return false;
  3039.     type = sdk_judge();
  3040.     if (type.ios == true) {
  3041.         var message = {'methodName':'pay','order':order,'paytype':paytype,'callbackMethod':callbackMethod};
  3042.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3043.     }else{
  3044.         var payType = '{"paytype":\"' + paytype + '\","callbackMethod":\"' + callbackMethod + '\"}';
  3045.         local_kingkr_obj.payType(order, payType)
  3046.     }
  3047. }
  3048. function audioPlay(operator) {
  3049.     if(!sdk_checkinside())return false;
  3050.     type = sdk_judge();
  3051.     if (type.ios == true) {
  3052.     }else{
  3053.         var data = "{\"operator\":" + operator + "}";
  3054.         local_kingkr_obj.audioPlay(data);
  3055.     }
  3056. }
  3057. function qrcode() {
  3058.     if(!sdk_checkinside())return false;
  3059.     var resulttype = 1;
  3060.     if(arguments[0] != null)
  3061.         resulttype = arguments[0];
  3062.     type = sdk_judge();
  3063.     if (type.ios == true) {
  3064.         var message = {'methodName':'qrcoder','controlQRCodeResult':resulttype,'callbackMethod':'qrcodeCallback'};
  3065.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3066.     }else{
  3067.         local_kingkr_obj.qrcoderWithCallback(resulttype);
  3068.     }
  3069. }
  3070. function cleanCache() {
  3071.     if(!sdk_checkinside())return false;
  3072.     type = sdk_judge();
  3073.     if (type.ios == true) {
  3074.         var message = {'methodName': 'cleancache'};
  3075.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3076.     } else {
  3077.         local_kingkr_obj.cleanCache();
  3078.     }
  3079. }
  3080. function controlBottomTabLayout(param) {
  3081.     if(!sdk_checkinside())return false;
  3082.     type = sdk_judge();
  3083.     if (type.ios == true) {
  3084.         if(param == null)
  3085.             var message = {'methodName':'controlBottomTabLayout'};
  3086.         else
  3087.             var message = {'methodName':'controlBottomTabLayout','show':''+param+''};
  3088.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3089.     } else {
  3090.         if(param == null)
  3091.             param = '';
  3092.         local_kingkr_obj.controlBottomTabLayout(param);
  3093.     }
  3094. }
  3095. function controllNavigateLayout(param) {
  3096.     if(!sdk_checkinside())return false;
  3097.     type = sdk_judge();
  3098.     if (type.ios == true) {
  3099.         if(param == null)
  3100.             var message = {'methodName':'controllNavigateLayout'};
  3101.         else
  3102.             var message = {'methodName':'controllNavigateLayout','show':''+param+''};
  3103.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3104.     } else {
  3105.         if(param == null)
  3106.             param = '';
  3107.         local_kingkr_obj.controlNavigatorLayout(param);
  3108.     }
  3109. }
  3110. function controlLeftMenuLayout(state) {
  3111.     if(!sdk_checkinside())return false;
  3112.     type = sdk_judge();
  3113.     if (type.ios == true) {
  3114.         var message = {'methodName':'controlLeftMenuLayout','show':state};
  3115.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3116.     } else {
  3117.         local_kingkr_obj.controlLeftMenuLayout(state);
  3118.     }
  3119. }
  3120. function getDeviceIdentifier(callbackMethod) {
  3121.     if(!sdk_checkinside())return false;
  3122.     type = sdk_judge();
  3123.     if (type.ios == true) {
  3124.         var message = {'methodName':'getDeviceIdentifier','callbackMethod':callbackMethod};
  3125.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3126.     }else{
  3127.         local_kingkr_obj.getDeviceIndentify(callbackMethod);
  3128.     }
  3129. }
  3130. function setScreenOrientation(orientation) {
  3131.     if(!sdk_checkinside())return false;
  3132.     type = sdk_judge();
  3133.     if (type.ios == true) {
  3134.         var message = {'methodName':'setScreenOrientation','orientation':orientation};
  3135.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3136.     }else{
  3137.         local_kingkr_obj.setScreenOrientation(orientation);
  3138.     }
  3139. }
  3140. function copyUrlToClipboard() {
  3141.     if(!sdk_checkinside())return false;
  3142.     type = sdk_judge();
  3143.     if (type.ios == true) {
  3144.         var message = {'methodName':'copyUrlToClipboard'};
  3145.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3146.     }else{
  3147.         local_kingkr_obj.clipboardManager();
  3148.     }
  3149. }
  3150. function awakeOtherBrowser(url) {
  3151.     if(!sdk_checkinside())return false;
  3152.     type = sdk_judge();
  3153.     if (type.ios == true) {
  3154.         if(url == ''){
  3155.             var message = {'methodName':'awakeOtherWebview'}
  3156.             window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3157.         }else{
  3158.             var message = {'methodName':'awakeOtherWebview','webviewUrl':url}
  3159.             window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3160.         }
  3161.     }else{
  3162.         local_kingkr_obj.awakeOtherWebview(url);
  3163.     }
  3164. }
  3165. function registerPushTag(tag,callbackmethod)
  3166. {
  3167.     if(tag == ''){
  3168.         return false;
  3169.     }
  3170.     tag = tag.split(',');
  3171.     if(!sdk_checkinside())return false;
  3172.     type = sdk_judge();
  3173.     if (type.ios == true) {
  3174.         var message = { 'methodName' : 'registerPushTag', 'tag':tag,'callbackMethod':callbackmethod};
  3175.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3176.     }else{
  3177.         var message = "{'tag':"+JSON.stringify(tag)+",'callbackMethod':"+callbackmethod+"}";
  3178.         local_kingkr_obj.registerPushTag(message);
  3179.     }
  3180. }
  3181. function getBuild(){
  3182.     type = sdk_judge();
  3183.     if (type.ios == true) {
  3184.         var message = {'methodName':'getBuild','callbackMethod':'getBuildResult'}
  3185.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3186.     }else{
  3187.         var b = local_kingkr_obj.getBuild();
  3188.         alert(b);
  3189.     }
  3190. }
  3191. function getBuildResult(buildVersion)
  3192. {
  3193.     alert(buildVersion);
  3194. }
  3195. function sdk_judge() {
  3196.     var u = navigator.userAgent;
  3197.     return {
  3198.         ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
  3199.         android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
  3200.     }
  3201. }
  3202. function sdk_checkinside(){
  3203.     if(!is_kingkr_obj()){
  3204.         alert("请在App内打开");
  3205.         return false;
  3206.     }
  3207.     return true;
  3208. }
  3209. function getLocation(callbackMethod){
  3210.     if(!sdk_checkinside())return false;
  3211.     type = sdk_judge();
  3212.     if (type.ios == true) {
  3213.         var message = {'methodName':'getLocation','callbackMethod':callbackMethod}
  3214.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3215.     }else{
  3216.         local_kingkr_obj.getLocation(callbackMethod);
  3217.     }
  3218. }
  3219. function copyText(txt){
  3220.     if(!sdk_checkinside())return false;
  3221.     type = sdk_judge();
  3222.     if (type.ios == true) {
  3223.         var message = {'methodName':'copyText','content':txt};
  3224.         window.webkit.messageHandlers.local_kingkr_obj.postMessage(message);
  3225.     }else{
  3226.         local_kingkr_obj.copyText(txt);
  3227.     }
  3228. }
  3229.  

  3230. pay.js文件

  3231. var addressList={};//,postage=0.00;
  3232. var l_express = true;
  3233. var l_friend = true;
  3234. var selffetch_obj = {};
  3235. var friend_obj = {};
  3236. function checkOrderAmount() {
  3237.     var order_id = $('.block-order ').data('id');
  3238.     var float_amount = parseFloat($('.block-order').data('float-amount'));
  3239.     var postage = parseFloat($('#js-postage').html());
  3240.     $.post('pay.php?action=checkAmount', {'order_id': order_id, 'float_amount': float_amount, 'postage': postage}, function(data) {
  3241.         if (data) {
  3242.             window.location.reload(); //重新刷新
  3243.         }
  3244.     })
  3245. }
  3246. $(function(){
  3247.     //订单支付金额检测
  3248.     //var timer = self.setInterval("checkOrderAmount()",5000);
  3249.     var total = Number($('#js-total').text());
  3250.     resetPrice();
  3251.     var haveAddress = function(){
  3252.         if(!is_userAddress){
  3253.             var msg = '请先添加收货地址';
  3254.             $('.btn-pay').css('display','none');
  3255.             $('.js-order-total').html('<span>'+msg+'</span>');
  3256.         }
  3257.     }
  3258.     haveAddress();
  3259.     /*查看留言*/
  3260.     $(".js-show-message").click(function () {
  3261.         var comment_obj = $(this).data("comment");
  3262.         var comment_html = '';
  3263.         for(var i in comment_obj) {
  3264.             comment_html += "<li><span>" + comment_obj[i].name + ":</span>" + comment_obj[i].value + "</li>";
  3265.         }
  3266.         var product_content = $(this).closest(".js-product-detail").html();
  3267.         product_content_obj = $("<div>" + product_content + "</div>");
  3268.         product_content_obj.find(".js-show-message").remove();
  3269.         product_content = product_content_obj.html();
  3270.         var comment_html = '<div class="modal order-modal active">\
  3271.                                 <div class="block block-order block-border-top-none">\
  3272.                                     <div class="block block-list block-border-top-none block-border-bottom-none">\
  3273.                                         <div class="block-item name-card name-card-3col clearfix">' + product_content + '</div>\
  3274.                                     </div>\
  3275.                                 </div>\
  3276.                                 <div class="block express" id="js-logistics-container">\
  3277.                                     <div class="block-item logistics">\
  3278.                                         <h4 class="block-item-title">留言信息</h4>\
  3279.                                     </div>\
  3280.                                     <div class="js-logistics-content logistics-content js-express">\
  3281.                                         <div>\
  3282.                                             <div class="block block-form block-border-top-none block-border-bottom-none">\
  3283.                                                 <div class="js-order-address express-panel" style="padding-left:0;">\
  3284.                                                     <ul>' + comment_html + '</ul>\
  3285.                                                 </div>\
  3286.                                             </div>\
  3287.                                         </div>\
  3288.                                     </div>\
  3289.                                 </div>\
  3290.                                 <div class="action-container"><button type="button" class="js-cancel btn btn-block">查看订单</button></div>\
  3291.                             </div>';
  3292.  
  3293.         var comment_obj = $(comment_html);
  3294.         $('body').append(comment_obj);
  3295.         comment_obj.find('.js-cancel').click(function(){
  3296.             comment_obj.remove();
  3297.         });
  3298.     });
  3299.  
  3300.     /*收货地址*/
  3301.     var editAdress = function(callbackObj,address_id){
  3302.         var addAdressDom = $('<div id="addAdress" class="modal order-modal active"><div><form class="js-address-fm address-ui address-fm"><div class="block" style="margin-bottom:10px;height:430px"><div class="block-item"><label class="form-row form-text-row"><em class="form-text-label">收货人</em><span class="input-wrapper"><input type="text" name="user_name" class="form-text-input" value="" placeholder="名字"></span></label></div><div class="block-item"><div class="form-row form-text-row"><em class="form-text-label">选择地区</em><div class="input-wrapper input-region js-area-select"><span><select id="province" name="province" class="address-province"></select></span><span><select id="city" name="city" class="address-city"><option>城市</option></select></span><span><select id="county" name="county" class="address-county"><option>区县</option></select></span></div></div></div><div class="block-item"><label class="form-row form-text-row"><em class="form-text-label">详细地址</em><span class="input-wrapper"><input id="tipinput" type="text" name="address" class="form-text-input map-a" value="" placeholder="街道门牌信息" ></span></label></div><div class="block-item"><label class="form-row form-text-row"><em class="form-text-label">联系电话</em><span class="input-wrapper"><input type="tel" name="tel" class="form-text-input" value="" placeholder="手机或固话"></span></label></div><div class="block-item" id="map"></div></div><div><div class="action-container"><a class="js-address-save btn btn-block btn-blue">保存</a><a class="js-address-cancel btn btn-block">取消</a></div></div></form></div></div>');
  3303.         $('body').append(addAdressDom);
  3304.         getProvinces('province','','省份');
  3305.         var is_red = 0;
  3306.         addAdressDom.find('#province').change(function(){
  3307.             if($(this).val() != ''){
  3308.                 getCitys('city','province','','城市');
  3309.             }else{
  3310.                 $('#city').html('<option>城市</option>');
  3311.             }
  3312.             $('#county').html('<option>区县</option>');
  3313.             addAdressDom.find('input[name="address"]').val('');
  3314.             district_search('province',$(this).find("option:selected").text());
  3315.         });
  3316.         addAdressDom.find('#city').change(function(){
  3317.             if($(this).val() != ''){
  3318.                 getAreas('county','city','','区县');
  3319.             }else{
  3320.                 $('#county').html('<option>区县</option>');
  3321.             }
  3322.             district_search('province',$(this).find("option:selected").text());
  3323.         });
  3324.         addAdressDom.find('#county').change(function(){
  3325.             district_search('province',$(this).find("option:selected").text());
  3326.         });
  3327.         addAdressDom.find('.js-address-cancel').click(function(){
  3328.             if(confirm('确定要放弃此次编辑吗?')){
  3329.                 addAdressDom.removeClass('active').remove();
  3330.             }
  3331.         });
  3332.         addAdressDom.find('.js-address-save').click(function(){
  3333.             if($(this).attr('disabled')){
  3334.                 motify.log('提交中,请稍等...');
  3335.                 return false;
  3336.             }
  3337.             //收货人
  3338.             var nameDom = addAdressDom.find('input[name="user_name"]');
  3339.             var name = $.trim(nameDom.val());
  3340.             if(name.length == 0){
  3341.                 motify.log('请填写名字');
  3342.                 nameDom.focus();
  3343.                 return false;
  3344.             }
  3345.             //联系电话
  3346.             var telDom = addAdressDom.find('input[name="tel"]');
  3347.             var tel = $.trim(telDom.val());
  3348.             if(tel.length == 0){
  3349.                 motify.log('请填写联系电话');
  3350.                 telDom.focus();
  3351.                 return false;
  3352.             }else if(!/^0[0-9\-]{10,13}$/.test(tel) && !/^((\+86)|(86))?(1)\d{10}$/.test(tel)){
  3353.                 motify.log('请填写正确的<br />手机号码或电话号码');
  3354.                 telDom.focus();
  3355.                 return false;
  3356.             }
  3357.             //地区
  3358.             var province = parseInt(addAdressDom.find('select[name="province"]').val());
  3359.             var city = parseInt(addAdressDom.find('select[name="city"]').val());
  3360.             var area = parseInt(addAdressDom.find('select[name="county"]').val());
  3361.             if(isNaN(province) || isNaN(city) || isNaN(area)){
  3362.                 motify.log('请选择地区');
  3363.                 return false;
  3364.             }
  3365.             //详细地址
  3366.             var addressDom = addAdressDom.find('input[name="address"]');
  3367.             var address = $.trim(addressDom.val());
  3368.             var lat_status  = $("input[name='lat_status']").val();
  3369.             if(address.length <= 4 || lat_status == 2){
  3370.                 console.log(lat_status);
  3371.                 motify.log('请输入详细收货地址');
  3372.                 addressDom.focus();
  3373.                 return false;
  3374.             }
  3375.             //邮政编码
  3376.             /*var zipcodeDom = addAdressDom.find('input[name="zipcode"]');
  3377.             var zipcode = $.trim(zipcodeDom.val());
  3378.             if(zipcode.length > 0 && !/^\d{6}$/.test(zipcode)){
  3379.                 motify.log('邮政编码格式不正确');
  3380.                 zipcodeDom.focus();
  3381.                 return false;
  3382.             }*/
  3383.             var nowDom = $(this);
  3384.             var lng = $("input[name='lng']").val();
  3385.             var lat = $("input[name='lat']").val();
  3386.             var lat_status  = $("input[name='lat_status']").val();
  3387.             if(lat_status == '2'){
  3388.                 //motify.log('请输入正确地址(检查定位)');
  3389.                 return false;
  3390.             }
  3391.             if(lng <= 0){
  3392.                 //motify.log('请点击或拖拽选择地理位置!');
  3393.                 return false;
  3394.             }
  3395.             nowDom.html('保存中...').attr('disabled',true);
  3396.             var post_data = {name:name,tel:tel,province:province,city:city,area:area,address:address,lng:lng,lat:lat};
  3397.             //console.log(post_data);return false;
  3398.             if(address_id){
  3399.                 var post_url = 'address.php?action=edit';
  3400.                 post_data.address_id = address_id;
  3401.             }else{
  3402.                 var post_url = 'address.php?action=add';
  3403.             }
  3404.             $.post(post_url,post_data,function(result){
  3405.                 //console.log();return false;
  3406.                 if(result.err_code){
  3407.                     motify.log(result.err_msg);
  3408.                 }else{
  3409.                     motify.log('操作成功');
  3410.                     setTimeout(function(){
  3411.                         window.location.reload();
  3412.                     },2000);
  3413.                 }
  3414.             });
  3415.         });
  3416.             var lng = $("input[name='lng']").val();
  3417.              var lat = $("input[name='lat']").val();
  3418.             lng = lng || 116.39773;
  3419.             lat = lat || 39.907815;
  3420.             var map = new AMap.Map("map", {
  3421.                 resizeEnable: true,
  3422.                 center: [lng, lat],
  3423.                 zoom: 10
  3424.             });
  3425.             var marker = new AMap.Marker({
  3426.                     position: [lng, lat],
  3427.                     zoom: 10
  3428.                 });
  3429.             marker.setMap(map);
  3430.             map.on('click', function(e) {
  3431.                  console.log(e);
  3432.                  var lnglat = [e.lnglat.lng,e.lnglat.lat];
  3433.                 setLenLat(lnglat);
  3434.             });
  3435.             function district_search(level,keywords){
  3436.                 AMap.plugin('AMap.DistrictSearch', function () {
  3437.                     var districtSearch = new AMap.DistrictSearch({
  3438.                     // 关键字对应的行政区级别,country表示国家
  3439.                         level: level,
  3440.                     //  显示下级行政区级数,1表示返回下一级行政区
  3441.                         subdistrict: 1
  3442.                     })
  3443.                   // 搜索所有省/直辖市信息
  3444.                     districtSearch.search(keywords, function(status, result) {
  3445.                         setLenLat([result.districtList[0].center.lng,result.districtList[0].center.lat]);
  3446.                     })
  3447.                 })
  3448.             }
  3449.             $('#tipinput').bind('input',function(){
  3450.                 autoSearch($(this).val());
  3451.             })
  3452.             function autoSearch(keyword){
  3453.                   AMap.plugin(['AMap.Autocomplete','AMap.PlaceSearch'],function(){
  3454.                     var city = $('#city').find("option:selected").text();
  3455.                     var district = $('#county').find("option:selected").text();
  3456.                       var autoOptions = {
  3457.                         city: city,
  3458.                         citylimit: true,
  3459.                         input: "tipinput"
  3460.                       }
  3461.                       var autocomplete= new AMap.Autocomplete(autoOptions);
  3462.                       autocomplete.search(district+keyword, function(status, result) {});
  3463.                     AMap.event.addListener(autocomplete, 'select', function(e){
  3464.                         setLenLat([e.poi.location.lng,e.poi.location.lat]);
  3465.                     })
  3466.                 });
  3467.             }
  3468.             function setLenLat(lnglat){
  3469.                  map.clearMap();
  3470.                  map.setCenter(lnglat);
  3471.                  var marker = new AMap.Marker({
  3472.                     position: lnglat,
  3473.                     zoom: 10
  3474.                 });
  3475.                  marker.setMap(map);
  3476.                  console.log(lnglat);
  3477.                 ediell(lnglat[0],lnglat[1])
  3478.             }
  3479.             function ediell(lng,lat){
  3480.                 $("input[name='lng']").val(lng);
  3481.                 $("input[name='lat']").val(lat);
  3482.                 $("input[name='lat_status']").val(1);
  3483.             }
  3484.         if(callbackObj) callbackObj();
  3485.     }
  3486.     $('.js-order-address > .js-edit-address').live('click',function(){
  3487.         editAdress();
  3488.     });
  3489.     var getPostage = function(type){
  3490.         var address_id = 0;
  3491.         var province_id = 0;
  3492.         if (!is_logistics) {
  3493.             return false;
  3494.         }
  3495.         if (typeof type == "undefined") {
  3496.             if($('#address_id').size() == 0){
  3497.                 return false;
  3498.             }
  3499.             address_id = $('#address_id').val();
  3500.         } else {
  3501.             if ($("#friend_province").size() > 0 && $("#friend_province").val() != "") {
  3502.                 province_id = $("#friend_province").val();
  3503.             }
  3504.         }
  3505.         $.post('address.php?action=postage',{orderNo:orderNo,address_id:address_id,province_id:province_id},function(result){
  3506.             //console.log(result);
  3507.             if(typeof(result) == 'object'){
  3508.                 if (result.err_msg == undefined || result.err_msg == null || result.err_msg == ''){
  3509.                     result.err_msg = 0;
  3510.                 }
  3511.                 if(result.err_code == 1002){
  3512.                     //alert('无法获取该订单支付信息\r\n错误提示:'+result.err_msg.error);
  3513.                     $('.btn-pay').css('display','none');
  3514.                     $('.js-order-total').html('<span>'+result.err_msg+'</span>');
  3515.                 }else if (result.err_code == 1001) {
  3516.                     window.location.reload();
  3517.                 } else if(result.err_code == 1009){
  3518.                     $('.js-step-topay').addClass('hide');
  3519.                     $('.js-logistics-tips').removeClass('hide');
  3520.                     if (typeof type == "undefined") {
  3521.                         l_express = false;
  3522.                     } else {
  3523.                         l_friend = false;
  3524.                     }
  3525.                 }else if(result.err_code){
  3526.                     $('.js-step-topay').removeClass('hide');
  3527.                     alert('无法获取该订单支付信息\r\n错误提示:'+result.err_msg);
  3528.                     if (typeof type == "undefined") {
  3529.                         l_express = false;
  3530.                     } else {
  3531.                         l_friend = false;
  3532.                     }
  3533.                 }else{
  3534.                     postage = parseFloat(result.err_msg);
  3535.                     var postdata = result.err_dom.postdata;
  3536.                     $("#js-postage").html(postage.toFixed(2));
  3537.                     console.log(postdata);
  3538.                     if(postdata.dynamicDesc && !postdata.is_freepost){
  3539.                         $("#appointDate").html('('+postdata.dynamicDesc+')');
  3540.                     }else{
  3541.                         $("#appointDate").html("");
  3542.                     }
  3543.                     $("input[name='postage_list']").val(result.err_dom);
  3544.                     resetPrice();
  3545.                     //$('.js-order-total').html('<p>¥'+sub_total.toFixed(2)+' + ¥'+postage.toFixed(2)+'运费</p><strong class="js-real-pay c-orange js-real-pay-temp">需付:¥'+(sub_total+postage).toFixed(2)+'</strong>');
  3546.                     $('.js-step-topay').removeClass('hide');
  3547.                     $('.js-logistics-tips').addClass('hide');
  3548.                     if (typeof type == "undefined") {
  3549.                         l_express = true;
  3550.                     } else {
  3551.                         l_friend = true;
  3552.                     }
  3553.                      //window.location.reload();
  3554.                 }
  3555.             }else{
  3556.                 motify.log('访问异常,请重试');
  3557.             }
  3558.         });
  3559.     }
  3560.     var refreshAdress = function(){
  3561.         $.post('address.php?action=list',function(result){
  3562.             if(typeof(result) == 'object'){
  3563.                 if(result.err_code == 0){
  3564.                     addressList = result.err_msg;
  3565.                 }
  3566.             }else{
  3567.                 motify.log('访问异常,请重试');
  3568.             }
  3569.         });
  3570.     }
  3571.     var selffetchEdit = false;
  3572.     $('.js-logistics-select button').click(function(){
  3573.         if(!$(this).hasClass('tag-orange')){
  3574.             if($('#address_id').size() == 0){
  3575.                 motify.log('您不能再修改配送方式');
  3576.                 $(this).blur();
  3577.                 return false;
  3578.             }
  3579.             // 保存切换之前填写的数据
  3580.             if ($(this).siblings(".tag-orange").data("type") == "selffetch") {
  3581.                 var self_name = $(".js-name").val();
  3582.                 var self_phone = $(".js-phone").val();
  3583.                 var self_date = $(".js-self-date").val();
  3584.                 var self_time = $(".js-self-time").val();
  3585.                 selffetch_obj.self_name = self_name;
  3586.                 selffetch_obj.self_phone = self_phone;
  3587.                 selffetch_obj.self_date = self_date;
  3588.                 selffetch_obj.self_time = self_time;
  3589.             } else if ($(this).siblings(".tag-orange").data("type") == "friend") {
  3590.                 var friend_name = $(".js-friend_name").val();
  3591.                 var friend_phone = $(".js-friend_phone").val();
  3592.                 var friend_province = $("#friend_province").val();
  3593.                 var friend_city = $("#friend_city").val();
  3594.                 var friend_county = $("#friend_county").val();
  3595.                 var friend_address = $(".js-friend_address").val();
  3596.                 var friend_date = $(".js-friend_time").eq(0).val();
  3597.                 var friend_time = $(".js-friend_time").eq(1).val();
  3598.                 friend_obj.friend_name = friend_name;
  3599.                 friend_obj.friend_phone = friend_phone;
  3600.                 friend_obj.friend_province = friend_province;
  3601.                 friend_obj.friend_city = friend_city;
  3602.                 friend_obj.friend_county = friend_county;
  3603.                 friend_obj.friend_address = friend_address;
  3604.                 friend_obj.friend_date = friend_date;
  3605.                 friend_obj.friend_time = friend_time;
  3606.             }
  3607.             $(this).addClass('tag-orange').siblings('button').removeClass('tag-orange');
  3608.             if($(this).data('type') == 'selffetch'){
  3609.                 $("#confirm-pay-way-opts").find("button").each(function () {
  3610.                     if ($(this).data("pay-type") == "offline") {
  3611.                         $(this).show();
  3612.                     }
  3613.                 });
  3614.                 $('#expre_time').css('display','none');
  3615.                 var selffetchListJson = $.parseJSON(selffetchList);
  3616.                 $('.js-step-topay').removeClass('hide');
  3617.                 if($('#selffetch_id').val() != '0' && selffetchEdit == false){
  3618.                     for(var i in selffetchListJson){
  3619.                         var selffetch = selffetchListJson[i];
  3620.                         if(selffetch.pigcms_id == $('#selffetch_id').val()){
  3621.                             var myDate=new Date();
  3622.                             var dateVal = myDate.getFullYear() + '-' + (myDate.getMonth()<9 ? '0'+(myDate.getMonth()+1) : (myDate.getMonth()+1)) + '-' + (myDate.getDate()<10 ? '0'+myDate.getDate() : myDate.getDate());
  3623.                             var timeVal = (myDate.getHours()<10 ? '0'+myDate.getHours() : myDate.getHours()) + ':' + (myDate.getMinutes()<10 ? '0'+myDate.getMinutes() : myDate.getMinutes());
  3624.                             var self_name = '';
  3625.                             var self_phone = '';
  3626.                             if (typeof selffetch_obj.self_name != 'undefined') {
  3627.                                 self_name = selffetch_obj.self_name;
  3628.                                 self_phone = selffetch_obj.self_phone;
  3629.                                 dateVal = selffetch_obj.self_date;
  3630.                                 timeVal = selffetch_obj.self_time;
  3631.                             }
  3632.                             $('.js-logistics-content').html('<div><div class="block block-form block-border-top-none block-border-bottom-none"><div class="js-order-address express-panel" style="padding-left:0;"><div class="opt-wrapper"><a href="javascript:;" class="btn btn-xxsmall btn-grayeee butn-edit-address js-edit-address">修改</a></div><ul><li><span>'+selffetch.name+'</span>, '+selffetch.tel+'</li><li>'+selffetch.province_txt+' '+selffetch.city_txt+' '+selffetch.county_txt+' </li><li>'+selffetch.address+'</li></ul></div><div class="clearfix block-item self-fetch-info-show"><label>预约人</label><input class="txt txt-black ellipsis js-name" placeholder="到店人姓名" value="' + self_name + '" /></div><div class="clearfix block-item   self-fetch-info-show "><label>联系方式</label><input type="text" class="txt txt-black ellipsis js-phone" placeholder="用于短信接收和便于卖家联系" value="' + self_phone + '" /></div><div class="clearfix block-item   self-fetch-info-show "><label class="pull-left">预约时间</label><input style="width:125px" class="txt txt-black js-time pull-left date-time js-self-date" type="date" placeholder="日期" value="'+dateVal+'"/><input style="width:70px" class="txt txt-black js-time pull-left date-time js-self-time" type="time" placeholder="时间" value="'+timeVal+'"/></div></div></div><input style="display:none;" class="js-hide-input" />');
  3633.                             $(".js-hide-input").focus();
  3634.                             $("#js-postage").html('0.00');
  3635.                             resetPrice();
  3636.                             //$('.js-order-total').html('<p>¥'+sub_total.toFixed(2)+' + ¥0.00运费</p><strong class="js-real-pay c-orange js-real-pay-temp">需付:¥'+sub_total.toFixed(2)+'</strong>');
  3637.                             break;
  3638.                         }
  3639.                     }
  3640.                 }else{
  3641.                     selffetchEdit = false;
  3642.                     var selffetchListHtml = '<div class="modal order-modal active"><div class="js-scene-address-list "><div class="address-ui address-list"><div class="block"><div class="js-address-container address-container">';
  3643.                     for(var i in selffetchListJson){
  3644.                         business_hours = "";
  3645.                         if (selffetchListJson[i].business_hours.length > 0) {
  3646.                             business_hours = ",自营时间:" + selffetchListJson[i].business_hours;
  3647.                         }
  3648.                         //selffetchListHtml += '<div><div class="js-address-item block-item" data-id="'+i+'"><h4>'+selffetchListJson[i].name+', '+selffetchListJson[i].tel + business_hours +'</h4><span class="address-str address-str-sf">'+selffetchListJson[i].province_txt+selffetchListJson[i].city_txt+selffetchListJson[i].county_txt+selffetchListJson[i].address+'</span><div class="address-opt"></div></div></div>';
  3649.                         selffetchListHtml += '<div class="block block-order">';
  3650.                         selffetchListHtml += '    <div class="store-header header">';
  3651.                         selffetchListHtml += '        <span>店铺:' + selffetchListJson[i].name + '</span>&nbsp;&nbsp;<button type="button" class="js-address-item btn btn-green" data-id="' + i + '">选择此门店</button>';
  3652.                         selffetchListHtml += '    </div>';
  3653.                         selffetchListHtml += '    <hr class="margin-0 left-10"/>';
  3654.                         selffetchListHtml += '    <div class="name-card name-card-3col name-card-store clearfix">';
  3655.                         selffetchListHtml += '        <a href="javascript:;" class="thumb js-view-image-list"><img class="js-view-image-item " src="' + selffetchListJson[i].logo + '"/></a>';
  3656.                         selffetchListHtml += '        <a href="tel:' + selffetchListJson[i].tel + '"><div class="phone"></div></a>';
  3657.                         if (selffetchListJson[i].pigcms_id == '99999999_store') {
  3658.                             selffetchListHtml += '        <a class="detail" target="_blank" href="./physical_detail.php?store_id=' + selffetchListJson[i].store_id + '">';
  3659.                         } else {
  3660.                             selffetchListHtml += '        <a class="detail" target="_blank" href="./physical_detail.php?id=' + selffetchListJson[i].pigcms_id + '">';
  3661.                         }
  3662.                         selffetchListHtml += '            <h3>' + selffetchListJson[i].province_txt + selffetchListJson[i].city_txt + selffetchListJson[i].county_txt + selffetchListJson[i].address + '</h3>';
  3663.                         if (selffetchListJson[i].business_hours.length > 0) {
  3664.                             selffetchListHtml += '            <p class="c-gray-dark ellipsis" style="margin-top:5px">营业时间:' + selffetchListJson[i].business_hours + '</p>';
  3665.                         }
  3666.                         selffetchListHtml += '        </a>';
  3667.                         if (long != 0 && lat != 0 && selffetchListJson[i].long != 0 && selffetchListJson[i].lat != 0) {
  3668.                             store_juli = 0;
  3669.                             try {
  3670.                                 store_juli = (getFlatternDistance(lat, long, selffetchListJson[i].lat, selffetchListJson[i].long) / 1000).toFixed(2);
  3671.                             } catch (e) {
  3672.                                 store_juli = 0;
  3673.                             }
  3674.                             if (store_juli > 0) {
  3675.                                 selffetchListHtml += "&nbsp;&nbsp;距离:" + store_juli + "km";
  3676.                             }
  3677.                         }
  3678.                         selffetchListHtml += '    </div>';
  3679.                         if (selffetchListJson[i].description.length > 0) {
  3680.                             selffetchListHtml += '    <hr/>';
  3681.                             selffetchListHtml += '    <div class="name-card-bottom c-gray-dark">商家推荐:' + selffetchListJson[i].description + '</div>';
  3682.                         }
  3683.                         selffetchListHtml += '</div>';
  3684.                     }
  3685.                     selffetchListHtml += '</div></div><div class="action-container"><button type="button" class="js-cancel btn btn-block">返回</button></div></div></div>';
  3686.                     var selffetchListDom = $(selffetchListHtml);
  3687.  
  3688.                     $('body').append(selffetchListDom);
  3689.                     selffetchListDom.find('.js-cancel').click(function(){
  3690.                         if($('#selffetch_id').val() == '0'){
  3691.                             $('.js-tabber-self-fetch').removeClass('tag-orange').siblings('button').trigger('click');
  3692.                         }
  3693.                         selffetchListDom.remove();
  3694.                     });
  3695.                     selffetchListDom.find('.js-address-item').click(function(){
  3696.                         var selffetch = selffetchListJson[$(this).data('id')];
  3697.                         var myDate=new Date();
  3698.                         var dateVal = myDate.getFullYear() + '-' + (myDate.getMonth()<9 ? '0'+(myDate.getMonth()+1) : (myDate.getMonth()+1)) + '-' + (myDate.getDate()<10 ? '0'+myDate.getDate() : myDate.getDate());
  3699.                         var timeVal = (myDate.getHours()<10 ? '0'+myDate.getHours() : myDate.getHours()) + ':' + (myDate.getMinutes()<10 ? '0'+myDate.getMinutes() : myDate.getMinutes());
  3700.                         business_hours = "";
  3701.                         if (selffetch.business_hours.length > 0) {
  3702.                             business_hours = ",自营时间:" + selffetch.business_hours;
  3703.                         }
  3704.                         $('.js-logistics-content').html('<div><div class="block block-form block-border-top-none block-border-bottom-none"><div class="js-order-address express-panel" style="padding-left:0;"><div class="opt-wrapper"><a href="javascript:;" class="btn btn-xxsmall btn-grayeee butn-edit-address js-edit-address">修改</a></div><ul><li><span>'+selffetch.name+'</span>, '+selffetch.tel + business_hours +'</li><li>'+selffetch.province_txt+' '+selffetch.city_txt+' '+selffetch.county_txt+' </li><li>'+selffetch.address+'</li></ul></div><div class="clearfix block-item self-fetch-info-show"><label>预约人</label><input class="txt txt-black ellipsis js-name" placeholder="到店人姓名"/></div><div class="clearfix block-item   self-fetch-info-show "><label>联系方式</label><input type="text" class="txt txt-black ellipsis js-phone" placeholder="用于短信接收和便于卖家联系" /></div><div class="clearfix block-item   self-fetch-info-show "><label class="pull-left">预约时间</label><input style="width:125px" class="txt txt-black js-time pull-left date-time js-self-date" type="date" placeholder="日期" value="'+dateVal+'"/><input style="width:70px" class="txt txt-black js-time pull-left date-time js-self-time" type="time" placeholder="时间" value="'+timeVal+'"/></div></div></div><input style="display:none;" class="js-hide-input" />');
  3705.                         $('#selffetch_id').val(selffetch.pigcms_id);
  3706.                         $(".js-hide-input").focus();
  3707.                         $("#js-postage").html('0');
  3708.                         resetPrice();
  3709.                         //$('.js-order-total').html('<p>¥'+sub_total.toFixed(2)+' + ¥0.00运费</p><strong class="js-real-pay c-orange js-real-pay-temp">需付:¥'+sub_total.toFixed(2)+'</strong>');
  3710.                         selffetchListDom.remove();
  3711.                     });
  3712.                 }
  3713.             } else if ($(this).data('type') == 'friend') {
  3714.                 if (l_friend) {
  3715.                     $('.js-step-topay').removeClass('hide');
  3716.                     $('.js-logistics-tips').addClass('hide');
  3717.                 } else {
  3718.                     $('.js-step-topay').addClass('hide');
  3719.                     $('.js-logistics-tips').removeClass('hide');
  3720.                 }
  3721.                 $("#confirm-pay-way-opts").find("button").each(function () {
  3722.                     if ($(this).data("pay-type") == "offline") {
  3723.                         $(this).hide();
  3724.                     }
  3725.                 });
  3726.                 var friend_name = '';
  3727.                 var friend_phone = '';
  3728.                 var friend_province = '';
  3729.                 var friend_city = '';
  3730.                 var friend_county = '';
  3731.                 var friend_address = '';
  3732.                 var myDate=new Date();
  3733.                 var dateVal = myDate.getFullYear() + '-' + (myDate.getMonth()<9 ? '0'+(myDate.getMonth()+1) : (myDate.getMonth()+1)) + '-' + (myDate.getDate()<10 ? '0'+myDate.getDate() : myDate.getDate());
  3734.                 var timeVal = (myDate.getHours()<10 ? '0'+myDate.getHours() : myDate.getHours()) + ':' + (myDate.getMinutes()<10 ? '0'+myDate.getMinutes() : myDate.getMinutes());
  3735.  
  3736.                 if (typeof friend_obj.friend_name != "undefined") {
  3737.                     friend_name = friend_obj.friend_name;
  3738.                     friend_phone = friend_obj.friend_phone;
  3739.                     friend_province = friend_obj.friend_province;
  3740.                     friend_city = friend_obj.friend_city;
  3741.                     friend_county = friend_obj.friend_county;
  3742.                     friend_address = friend_obj.friend_address;
  3743.                     dateVal = friend_obj.friend_date;
  3744.                     timeVal = friend_obj.friend_time;
  3745.                 }
  3746.                 var html = '<div>\
  3747.                                 <div class="block block-form block-border-top-none block-border-bottom-none">\
  3748.                                 <div class="clearfix block-item self-fetch-info-show">\
  3749.                                     <label>朋友姓名</label>\
  3750.                                     <input class="txt txt-black ellipsis js-friend_name" placeholder="朋友姓名" value="' + friend_name + '" />\
  3751.                                 </div>\
  3752.                                 <div class="clearfix block-item self-fetch-info-show ">\
  3753.                                     <label>联系方式</label>\
  3754.                                     <input type="text" class="txt txt-black ellipsis js-friend_phone" placeholder="用于短信接收和便于卖家联系" value="' + friend_phone + '" />\
  3755.                                 </div>\
  3756.                                 <div class="clearfix block-item self-fetch-info-show ">\
  3757.                                     <label>选择地区</label>\
  3758.                                         <span>\
  3759.                                         <select id="friend_province" name="friend_province" class="address-province" style="width:80px; margin:0px;">\
  3760.                                             <option>省</option>\
  3761.                                         </select>\
  3762.                                     </span>\
  3763.                                     <span>\
  3764.                                         <select id="friend_city" name="friend_city" class="address-city" style="width:80px; margin:0px;">\
  3765.                                             <option>城市</option>\
  3766.                                         </select>\
  3767.                                     </span>\
  3768.                                     <span>\
  3769.                                         <select id="friend_county" name="friend_county" class="address-county" style="width:80px; margin:0px;">\
  3770.                                             <option>区县</option>\
  3771.                                         </select>\
  3772.                                     </span>\
  3773.                                 </div>\
  3774.                                 <div class="clearfix block-item self-fetch-info-show ">\
  3775.                                     <label>详细地址</label>\
  3776.                                     <input type="text" class="txt txt-black ellipsis js-friend_address" placeholder="详细地址" value="' + friend_address + '" />\
  3777.                                 </div>\
  3778.                                 <div class="clearfix block-item friend-info-show ">\
  3779.                                     <label class="pull-left">预约时间</label>\
  3780.                                     <input style="width:125px" class="txt txt-black js-friend_time pull-left date-time" type="date" placeholder="日期" value="'+dateVal+'"/>\
  3781.                                     <input style="width:70px" class="txt txt-black js-friend_time pull-left date-time" type="time" placeholder="时间" value="'+timeVal+'"/>\
  3782.                                 </div>\
  3783.                             </div>\
  3784.                             <div class="js-logistics-tips logistics-tips font-size-12 c-orange hide">很抱歉,该地区暂不支持配送。</div>\
  3785.                         </div>';
  3786.                 $('.js-logistics-content').html(html);
  3787.                 $('#friend_province').change(function(){
  3788.                     if($(this).val() != ''){
  3789.                         getPostage('friend');
  3790.                         getCitys('friend_city','friend_province','','城市');
  3791.                     }else{
  3792.                         $('#friend_city').html('<option>城市</option>');
  3793.                     }
  3794.                     $('#friend_county').html('<option>区县</option>');
  3795.                 });
  3796.                 $('#friend_city').change(function(){
  3797.                     if($(this).val() != ''){
  3798.                         getAreas('friend_county','friend_city','','区县');
  3799.                     }else{
  3800.                         $('#friend_county').html('<option>区县</option>');
  3801.                     }
  3802.                 });
  3803.                 getProvinces('friend_province',friend_province,'省份');
  3804.                 if (friend_province) {
  3805.                     getPostage('friend');
  3806.                 }
  3807.                 if (friend_city != '') {
  3808.                     getCitys('friend_city','friend_province',friend_city,'城市');
  3809.                 }
  3810.                 if (friend_county != '') {
  3811.                     getAreas('friend_county','friend_city',friend_county,'区县');
  3812.                 }
  3813.             }else{
  3814.                 $("#confirm-pay-way-opts").find("button").each(function () {
  3815.                     if ($(this).data("pay-type") == "offline") {
  3816.                         $(this).show();
  3817.                     }
  3818.                 });
  3819.                 $('#expre_time').css('display','flex');
  3820.                 if (l_express == true) {
  3821.                     $('.js-step-topay').removeClass('hide');
  3822.                     $('.js-logistics-tips').addClass('hide');
  3823.                 } else {
  3824.                     $('.js-step-topay').addClass('hide');
  3825.                     $('.js-logistics-tips').removeClass('hide');
  3826.                 }
  3827.                 if($('#address_id').val() != '0'){
  3828.                     var nowAdress = addressList[$('#address_id').val()];
  3829.                     var area_text = '';
  3830.                     if (__alldiv[nowAdress.area][0] != '市辖区' && __alldiv[nowAdress.area][0] != '县') {
  3831.                         area_text = __alldiv[nowAdress.area][0];
  3832.                     }
  3833.                     $('.js-logistics-content').html('<div><div class="block block-form block-border-top-none block-border-bottom-none"><div class="js-order-address express-panel" style="padding-left:0;"><div class="opt-wrapper"><a href="javascript:;" class="btn btn-xxsmall btn-grayeee butn-edit-address js-edit-address">修改</a></div><ul><li><span>'+nowAdress.name+'</span>, '+nowAdress.tel+'</li><li>'+__alldiv[nowAdress.province][0]+' '+__alldiv[nowAdress.city][0]+' '+area_text+' </li><li>'+nowAdress.address+'</li></ul></div></div><div class="js-logistics-tips logistics-tips font-size-12 c-orange hide">很抱歉,该地区暂不支持配送。</div></div><input style="display:none;" class="js-hide-hide" />');
  3834.                     $("#js-postage").html(postage);
  3835.                     $(".js-hide-hide").focus();
  3836.                     resetPrice();
  3837.                     //$('.js-order-total').html('<p>¥'+sub_total.toFixed(2)+' + ¥'+postage.toFixed(2)+'运费</p><strong class="js-real-pay c-orange js-real-pay-temp">需付:¥'+(sub_total+postage.toFixed(2))+'</strong>');
  3838.                 }else{
  3839.                     $('.js-logistics-content').html('<div><div class="js-order-address express-panel"><div class="js-edit-address address-tip"><span>添加收货地址</span></div></div></div>');
  3840.                 }
  3841.             }
  3842.         }
  3843.     });
  3844.     //js-logistics-select button    end
  3845.     $('.js-order-address .opt-wrapper .js-edit-address').live('click',function(){
  3846.         /*优先判断到店自提*/
  3847.         if(selffetchList && $('.js-tabber-self-fetch').hasClass('tag-orange')){
  3848.             selffetchEdit = true;
  3849.             $('.js-tabber-self-fetch').removeClass('tag-orange').trigger('click');
  3850.         }else{
  3851.             // if(!isLogin){
  3852.                 var nowAdress = addressList[$('#address_id').val()];
  3853.                 editAdress(function(){
  3854.                     $('#addAdress input[name="user_name"]').val(nowAdress.name);
  3855.                     $('#addAdress input[name="tel"]').val(nowAdress.tel);
  3856.                     $('#addAdress input[name="address"]').val(nowAdress.address);
  3857.                     $('#addAdress input[name="zipcode"]').val(nowAdress.zipcode);
  3858.                     getProvinces('province',nowAdress.province);
  3859.                     getCitys('city','province',nowAdress.city,'城市');
  3860.                     getAreas('county','city',nowAdress.area,'区县');
  3861.                 },nowAdress.address_id);
  3862.             // }
  3863.         }
  3864.     });
  3865.     //页面初始化
  3866.     if($('.js-order-address > .js-edit-address').size()){
  3867.         if (is_logistics) {
  3868.             $('.js-order-address > .js-edit-address').trigger('click');
  3869.         }
  3870.     }else{
  3871.         //if($('.js-step-topay').hasClass('hide')){
  3872.             getPostage();
  3873.         //}
  3874.         refreshAdress();
  3875.     }
  3876.     if ($(".js-order-address > .js-selffetch-address").size() && is_selffetch) {
  3877.         $('.js-logistics-select button').trigger('click');
  3878.     }
  3879.     $(".js-selffetch-address").click(function () {
  3880.         $('.js-logistics-select button').trigger('click');
  3881.     });
  3882.  
  3883.     $('.js-msg-container').focus(function(){
  3884.         $(this).addClass('two-rows');
  3885.     }).blur(function(){
  3886.         $(this).removeClass('two-rows');
  3887.     });
  3888.     var nowScroll=0;
  3889.     var payShowAfter = function(){
  3890.         $('html').css({'overflow':'visible','height':'auto','position':'static'});
  3891.         $('body').css({'overflow':'visible','height':'auto','padding-bottom':'45px'});
  3892.         $(window).scrollTop(nowScroll);
  3893.     }
  3894.     //js-total point-pay
  3895.     $("#ep_pay").click(function(){
  3896.         var conf =  $(this).is(':checked');
  3897.         //var total = Number($(this).val());
  3898.         var total = Number($('#hidden_total').val());
  3899.         var user_money = Number($('.use_money').text());
  3900.         console.log(user_money);
  3901.         console.log(total);
  3902.         if(user_money >= total && conf == true){
  3903.             $('.point-pay').css('display','block');
  3904.             $('.pay_but').css('display','none');
  3905.             //return false;
  3906.         }else if(user_money >= total && conf == false){
  3907.             $('.point-pay').css('display','none');
  3908.             $('.pay_but').css('display','block');
  3909.             //return false;
  3910.         }
  3911.         if(user_money < total){
  3912.             var post_data = {orderNo:orderNo,user_money:user_money};
  3913.             if(conf == true){
  3914.                 post_data.use = 1;
  3915.             }else{
  3916.                 post_data.use = 0;
  3917.             }
  3918.             $.post('aaep_exchange.php?action=use_eb',post_data,function(re){
  3919.                 if (re.error == 0) {
  3920.                     $('#js-total').text(re.total);
  3921.                     if(post_data.use == 1){
  3922.                         $('#addeb').text( '-¥' +user_money);
  3923.                     }else{
  3924.                         $('#addeb').text('');
  3925.                     }
  3926.                     //$('#js-sub_total').text((re.total - postage).toFixed(2));
  3927.                 }else{
  3928.                     motify.log(re.msg);
  3929.                     $("#ep_pay").attr("checked", false);
  3930.                 }
  3931.             },'json');
  3932.         }
  3933.     });
  3934.     //var flag = true;
  3935.     $('#confirm-pay-way-opts .btn-pay').click(function(){
  3936.         if (!is_logistics && !is_selffetch) {
  3937.             motify.log('商家未设置配送方式,暂时不能购买');
  3938.             return;
  3939.         }
  3940.         /*if(flag == false){
  3941.             return;
  3942.         }*/
  3943.         var payType = $(this).data('pay-type');
  3944.         /*if(payType){
  3945.             flag = false;
  3946.         }*/
  3947.         var post_data = {payType:payType,orderNo:orderNo,msg:$('.js-msg-container').val()};
  3948.         if($('#address_id').size() > 0){
  3949.             if($('.js-tabber-self-fetch').hasClass('tag-orange')){
  3950.                 var selffetch_id = $('#selffetch_id').val();
  3951.                 var selffetch_name = $.trim($('.js-logistics-content .js-name').val());
  3952.                 var selffetch_phone = $.trim($('.js-logistics-content .js-phone').val());
  3953.                 if(parseInt(selffetch_id) < 1){
  3954.                     motify.log('请选择自提点');
  3955.                     return false;
  3956.                 }else if(selffetch_name.length == 0){
  3957.                     motify.log('请填写您的姓名');
  3958.                     return false;
  3959.                 }else if(!/^0[0-9\-]{10,13}$/.test(selffetch_phone) && !/^((\+86)|(86))?(1)\d{10}$/.test(selffetch_phone)){
  3960.                     motify.log('请填写正确的联系方式');
  3961.                     return false;
  3962.                 }else{
  3963.                     post_data.shipping_method = 'selffetch';
  3964.                     post_data.selffetch_id = selffetch_id;
  3965.                     post_data.selffetch_name = selffetch_name;
  3966.                     post_data.selffetch_phone = selffetch_phone;
  3967.                     post_data.selffetch_date = $('.js-logistics-content .js-time').eq(0).val();
  3968.                     post_data.selffetch_time = $('.js-logistics-content .js-time').eq(1).val();
  3969.                 }
  3970.             } else if ($(".js-tabber-friend").hasClass("tag-orange")) {
  3971.                 var friend_name = $(".js-friend_name").val();
  3972.                 var friend_phone = $(".js-friend_phone").val();
  3973.                 var province = $("#friend_province").val();
  3974.                 var city = $("#friend_city").val()
  3975.                 var county = $("#friend_county").val();
  3976.                 var friend_address = $(".js-friend_address").val();
  3977.                 if (friend_name.length == 0) {
  3978.                     motify.log("请填写朋友姓名");
  3979.                     return false;
  3980.                 }
  3981.                 if(!/^0[0-9\-]{10,13}$/.test(friend_phone) && !/^((\+86)|(86))?(1)\d{10}$/.test(friend_phone)){
  3982.                     motify.log("请填写正确的联系方式");
  3983.                     return false;
  3984.                 }
  3985.                 if (province.length == 0) {
  3986.                     motify.log("请选择省");
  3987.                     return false;
  3988.                 }
  3989.                 if (city.length == 0) {
  3990.                     motify.log("请选择城市");
  3991.                     return false;
  3992.                 }
  3993.                 if (county.length == 0) {
  3994.                     motify.log("请选择区县");
  3995.                     return false;
  3996.                 }
  3997.                 if (friend_address.length == 0) {
  3998.                     motify.log("请填写详细地址");
  3999.                     return false;
  4000.                 }
  4001.                 if (friend_address.length < 10) {
  4002.                     motify.log("详细地址不能少于10个字符");
  4003.                     return false;
  4004.                 }
  4005.                 post_data.shipping_method = "friend";
  4006.                 post_data.friend_name = friend_name;
  4007.                 post_data.friend_phone = friend_phone;
  4008.                 post_data.province = province;
  4009.                 post_data.city = city;
  4010.                 post_data.county = county;
  4011.                 post_data.friend_address = friend_address;
  4012.                 post_data.friend_date = $('.js-logistics-content .js-time').eq(0).val();
  4013.                 post_data.friend_time = $('.js-logistics-content .js-time').eq(1).val();
  4014.             } else {
  4015.                 if(parseInt($('#address_id').val()) < 1){
  4016.                     motify.log('请选择收货地址');
  4017.                     return false;
  4018.                 }else{
  4019.                     post_data.address_id = $('#address_id').val();
  4020.                 }
  4021.             }
  4022.         }
  4023.         try {
  4024.             if ($(".js-user_coupon_input").length > 0) {
  4025.                 var user_coupon_arr = [];
  4026.                 $(".js-user_coupon_input").each(function () {
  4027.                     if ($(this).prop("checked") && $(this).val() != "0") {
  4028.                         user_coupon_arr.push($(this).val());
  4029.                     }
  4030.                 });
  4031.                 post_data.user_coupon_id = user_coupon_arr;
  4032.             }
  4033.             /*if ($("input[name='user_coupon_id']").length > 0) {
  4034.                 post_data.user_coupon_id = $("input[name='user_coupon_id']:checked").val();
  4035.             }*/
  4036.         } catch(e) {
  4037.         }
  4038.         post_data.postage_list = $("input[name='postage_list']").val();
  4039.  
  4040.         var loadingCon = $('<div id="vv1" style="overflow:hidden;visibility:visible;position:absolute;z-index:1100;transition:opacity 300ms ease;-webkit-transition:opacity 300ms ease;opacity:1;top:'+(($(window).height()-100)/2)+'px;left:'+(($(window).width()-200)/2)+'px;"><div class="loader-container"><div class="loader center">处理中</div></div></div>');
  4041.         var loadingBg = $('<div id="vv2" style="height:100%;position:fixed;top:0px;left:0px;right:0px;z-index:1000;opacity:1;transition:opacity 0.2s ease;-webkit-transition:opacity 0.2s ease;background-color:rgba(0,0,0,0.901961);"></div>');
  4042.         $('html').css({'position':'relative','overflow':'hidden','height':$(window).height()+'px'});
  4043.         $('body').css({'overflow':'hidden','height':$(window).height()+'px','padding':'0px'}).append(loadingCon).append(loadingBg);
  4044.         nowScroll = $(window).scrollTop();
  4045.         //本地测试使用
  4046.         if (payType == 'test') {
  4047.             is_have_pass();
  4048.             $.post('saveorder.php?action=test_pay',post_data,function(result){
  4049.                 if (result.error == 0) {
  4050.                     ep.pass({
  4051.                         titel:'请输入支付密码',
  4052.                         pay_title:'余额',
  4053.                         total:result.data.pay_money,
  4054.                         trade_no:result.data.trade_no,
  4055.                         orderNo:result.data.orderNo,
  4056.                         paytype:'test',
  4057.                     });
  4058.                     //console.log(result.err_code);
  4059.                     //window.location.href = result.err_msg;
  4060.                 } else {
  4061.                     motify.log(result.err_msg);
  4062.                 }
  4063.             },'json');
  4064.             return false;
  4065.         }
  4066.         if (payType == 'eb_pay') {
  4067.             //console.log(post_data);
  4068.             is_have_pass();
  4069.             $.post('saveorder.php?action=eb_pay',post_data,function(result){
  4070.                 if (result.error == 0) {
  4071.                     ep.pass({
  4072.                         titel:'请输入支付密码',
  4073.                         pay_title:'E币',
  4074.                         total:result.data.pay_money,
  4075.                         trade_no:result.data.trade_no,
  4076.                         orderNo:result.data.orderNo,
  4077.                         paytype:'eb_pay',
  4078.                     });
  4079.                     //window.location.href = result.err_msg;
  4080.                 } else {
  4081.                     motify.log(result.err_msg);
  4082.                 }
  4083.             },'json');
  4084.             //console.log(result.err_code);
  4085.             return false;
  4086.         }
  4087.         if ($(this).hasClass('go-pay')) {
  4088.             $.post('saveorder.php?action=go_pay',post_data,function(result){
  4089.                 if (!result.err_code) {
  4090.                     window.location.href = result.err_msg;
  4091.                 } else {
  4092.                     motify.log(result.err_msg);
  4093.                 }
  4094.             })
  4095.             return true;
  4096.         }
  4097.          if(!is_weixin){
  4098.             post_data.is_app = true;
  4099.         }
  4100.         console.log(post_data);
  4101.         $.post('saveorder.php?action=pay',post_data,function(result){
  4102.             payShowAfter();
  4103.             loadingBg.css('opacity',0);
  4104.             setTimeout(function(){
  4105.                 loadingCon.remove();loadingBg.remove();
  4106.             },200);
  4107.             console.log(result);
  4108.             if(typeof(result) == 'object'){
  4109.                 if(result.err_code == 0){
  4110.                     if(is_kingkr_obj()){
  4111.                         //var payinfo_data = '"'+JSON.stringify(result.err_msg)+'"';
  4112.                         //alert(result.err_msg);
  4113.                         payTypeApp(JSON.stringify(result.err_msg),'WEIXIN','payResult');
  4114.                     }else if(payType == 'weixin' && window.WeixinJSBridge){
  4115.                         window.WeixinJSBridge.invoke("getBrandWCPayRequest",result.err_msg,function(res){
  4116.                             //WeixinJSBridge.log(res.err_msg);
  4117.                             //alert(JSON.stringify(res));
  4118.                             if(res.err_msg=="get_brand_wcpay_request:ok"){
  4119.                                 audioapi();
  4120.                                 setTimeout(function(){
  4121.                                     window.location.href = './order.php?orderno='+orderNo;
  4122.                                 },3000)
  4123.                             }else{
  4124.                                 if(res.err_msg == "get_brand_wcpay_request:cancel"){
  4125.                                     var err_msg = "您取消了微信支付";
  4126.                                 }else if(res.err_code == 3){
  4127.                                     var err_msg = "您正在进行跨号支付<br/>正在为您转入扫码支付......";
  4128.                                 }else if(res.err_msg == "get_brand_wcpay_request:fail"){
  4129.                                     if(res.err_desc.substring(0,6) == '商户系统错误'){
  4130.                                         motify1.ewm(orderNo);
  4131.                                         return;
  4132.                                     }else{
  4133.                                         var err_msg = "微信支付失败<br/>错误信息:"+res.err_desc;
  4134.                                     }
  4135.                                 }else{
  4136.                                     var err_msg = res.err_msg +"<br/>"+res.err_desc;
  4137.                                 }
  4138.                                 //motify.log(err_msg);
  4139.                                 if(res.err_code == 3){
  4140.                                     wx_qrcode_pay(post_data);
  4141.                                 }
  4142.                             }
  4143.                         });
  4144.                     }else{
  4145.                         window.location.href = result.err_msg;
  4146.                     }
  4147.                 }else{
  4148.                     if(result.err_code == 1008){
  4149.                         motify.log("此订单为货到付款,现在无须支付");
  4150.                         window.location.href = result.err_msg;
  4151.                         return;
  4152.                     }
  4153.                     motify.log(result.err_msg);
  4154.                     if(result.err_code == 1007){
  4155.                         window.location.href = './order.php?orderno='+orderNo;
  4156.                     }
  4157.                 }
  4158.             }else{
  4159.                 motify.log(result.err_msg);
  4160.                 // motify.log('访问异常,请重试');
  4161.             }
  4162.         });
  4163.         /*setTimeout(function(){
  4164.             flag = true;
  4165.         },3000);*/
  4166.     });
  4167.     // 更改优惠券
  4168.     $(".js-user_coupon_input").click(function () {
  4169.         var user_coupon = 0;
  4170.         $(".js-user_coupon_input").each(function () {
  4171.             if ($(this).prop("checked")) {
  4172.                 var coupon = parseFloat($(this).closest("p").find("span").html());
  4173.                 user_coupon += coupon;
  4174.             }
  4175.         });
  4176.         if ($("#js-user_coupon").length > 0) {
  4177.             $("#js-user_coupon").html(user_coupon.toFixed(2));
  4178.         }
  4179.         resetPrice();
  4180.     });
  4181.     if ($(".js-logistics-select .js-tabber-self-fetch").size() > 0) {
  4182.         if (is_selffetch) {
  4183.             getLocation();
  4184.         }
  4185.     }
  4186. });
  4187. function wx_qrcode_pay(post_data){
  4188.     $.post('saveorder.php?action=pay&qrcode_pay=1',post_data,function(result){
  4189.         if(result.err_code == 0){
  4190.             $('#pay-qrcode').attr('src',result.err_msg);
  4191.             $('#confirm-pay-way-opts').css('display','none');
  4192.             $('#confirm-qrcode-pay').css('display','block');
  4193.         }
  4194.     });
  4195. }
  4196. function resetPrice() {
  4197.     var postage1 = parseFloat($("#js-postage").html());
  4198.     var sub_total = parseFloat($("#js-sub_total").html());
  4199.     var reward = 0;
  4200.     var user_coupon = 0;
  4201.     var float_amount = 0;
  4202.     var discount_money = 0;
  4203.     if ($("#js-reward").length > 0) {
  4204.         reward = parseFloat($("#js-reward").html());
  4205.     }
  4206.     if ($("#js-user_coupon").length > 0) {
  4207.         user_coupon = parseFloat($("#js-user_coupon").html());
  4208.     }
  4209.     if ($("#js-float_amount").length > 0) {
  4210.         float_amount = parseFloat($("#js-float_amount").html());
  4211.     }
  4212.     if ($("#js-discount_money").length > 0) {
  4213.         discount_money = parseFloat($("#js-discount_money").html())
  4214.     }
  4215.     var money = sub_total + postage1 - reward - user_coupon - float_amount - discount_money - eb_balace;
  4216.     if (money < 0) {
  4217.         money = 0;
  4218.     }
  4219.     $('#hidden_total').val(money.toFixed(2));
  4220.     $("#js-total").html(money.toFixed(2));
  4221. }
  4222. var long = 0;
  4223. var lat = 0;
  4224. function getLocation() {
  4225.     var options = {
  4226.         enableHighAccuracy:true,
  4227.         maximumAge:1000
  4228.     }
  4229.     if(navigator.geolocation) {
  4230.         //浏览器支持geolocation
  4231.         navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
  4232.     } else {
  4233.         //浏览器不支持geolocation
  4234.     }
  4235. }
  4236. //成功时
  4237. function onSuccess(position){
  4238.     long = position.coords.longitude;
  4239.     lat = position.coords.latitude;
  4240. }
  4241. //失败时
  4242. function onError(error) {
  4243. }
  4244. function getFlatternDistance(lat1,lng1,lat2,lng2){
  4245.     lat1 = parseFloat(lat1);
  4246.     lng1 = parseFloat(lng1);
  4247.     lat2 = parseFloat(lat2);
  4248.     lng2 = parseFloat(lng2);
  4249.     var f = getRad((lat1 + lat2)/2);
  4250.     var g = getRad((lat1 - lat2)/2);
  4251.     var l = getRad((lng1 - lng2)/2);
  4252.     var sg = Math.sin(g);
  4253.     var sl = Math.sin(l);
  4254.     var sf = Math.sin(f);
  4255.     var s,c,w,r,d,h1,h2;
  4256.     var a = EARTH_RADIUS;
  4257.     var fl = 1/298.257;
  4258.     sg = sg*sg;
  4259.     sl = sl*sl;
  4260.     sf = sf*sf;
  4261.     s = sg*(1-sl) + (1-sf)*sl;
  4262.     c = (1-sg)*(1-sl) + sf*sl;
  4263.     w = Math.atan(Math.sqrt(s/c));
  4264.     r = Math.sqrt(s*c)/w;
  4265.     d = 2*w*a;
  4266.     h1 = (3*r -1)/2/c;
  4267.     h2 = (3*r +1)/2/s;
  4268.     return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
  4269. }
  4270. /*获取位置距离*/
  4271. var EARTH_RADIUS = 6378137.0;    //单位M
  4272. var PI = Math.PI;
  4273. function getRad(d) {
  4274.     return d*PI/180.0;
  4275. }
  4276.     function is_have_pass(){
  4277.         $.post('aaep_exchange.php?action=check_password', {pass: 'check'}, function(re) {
  4278.             if(re.error == 0){
  4279.                 return true;
  4280.             }else{
  4281.                 window.location.href = "aaep_exchange.php?action=add_password";
  4282.             }
  4283.         },'json');
  4284.     }
  4285.     function backs(){
  4286.         nowScroll = $(window).scrollTop();
  4287.         $('html').css({'overflow':'visible','height':'auto','position':'static'});
  4288.         $('body').css({'overflow':'visible','height':'auto','padding-bottom':'45px'});
  4289.         $(window).scrollTop(nowScroll);
  4290.         $('#vv2').css('opacity',0);
  4291.         $('#vv1').remove();
  4292.         $('#vv2').remove();
  4293.         $('.motify_pass').remove();
  4294.     }
  4295.     var ep = {
  4296.         pass:function(msg){
  4297.             console.log(msg);
  4298.             if(msg.paytype == 'test'){
  4299.                 use_eb_value = 1;
  4300.                 var tp = '余额支付'+(msg.total)*use_eb_value+'元';
  4301.             }else{
  4302.                 var tp = (msg.total)*use_eb_value;
  4303.             }
  4304.             $('body').append('<div class="motify_pass" style="display:block;background:#36b9fb;"><div class="motify-inner_pass"><a href="javascript:;" onclick="backs()" class="back-pay">X</a><font style="color:#FFF">'+msg.titel+'</font></div><div class="motify_input_pass"><div class="pay_title"><p style="width:90%; border-bottom:1px solid #f1f1f1; padding-bottom:10px; margin-left:5%"><span style="display:block; padding:10px 0 5px 0; font-size:12px;">消费使用E币</span><span style="font-size:24px; font-weight:600;">Ѥ'+tp+'</span></p></div><input type="password" class="mui-input-password" id="pass" placeholder="输入支付密码" style="width:66%;height:35px;border:1px solid #e5e5e5;border-radius:3%;margin-left:3%" autofocus="autofocus"/><a href="javascript:;" class="btn btn-block" id="pay" data-trade_no="'+msg.trade_no+'" data-total="'+msg.total+'"  data-order_no="'+ msg.orderNo +'" data-paytype="'+ msg.paytype +'" onclick="pay_pass(this)" style="background: #fff;color:#000;line-height: 12px; height:35px; margin-top:3px;font-size:12px">支付</a></div ><div class="motify_btn"></div></div>');
  4305.  
  4306.     },
  4307.     addpass:function(data){
  4308.     }
  4309. };
  4310. function pay_pass(obj){
  4311.     var pass = document.getElementById('pass').value;
  4312.     console.log(pass);
  4313.     // return false;
  4314.     if(pass == ''){
  4315.         motify.log('密码不能为空');return false;
  4316.     }
  4317.     $(obj).text('支付中')
  4318.      $(obj).attr("disabled","disabled");
  4319.     // return false;
  4320.     var paytype = $(obj).data('paytype');
  4321.     var data = {pay_type:paytype,pay_password: pass}
  4322.         data.trade_no = $(obj).data('trade_no');
  4323.         data.pay_money = $(obj).data('total');
  4324.         data.orderNo = $(obj).data('order_no');
  4325.     $.post('aaep_exchange.php?action=pay_pass', data, function(re) {
  4326.         console.log(re);
  4327.         if(re.error == 0){
  4328.             audioapi();
  4329.             setTimeout(function() {
  4330.                 motify.log(re.msg);
  4331.             },500);
  4332.             setTimeout(function() {
  4333.                 window.location.href = re.url;
  4334.             },2000);
  4335.         }else if(re.error == 1){
  4336.             $(obj).text('支付')
  4337.             $(obj).attr("disabled",false);
  4338.             motify.log(re.msg);return false;
  4339.         }else{
  4340.             motify.log(re.msg);return false;
  4341.         }
  4342.     },'json');
  4343.     //console.log(JSON.parse(data));
  4344. }
  4345. function audioapi(){
  4346.     var name = 1;
  4347.      ws = new WebSocket("wss://tui.51ao.com:443");
  4348.      ws.onopen = function () {
  4349.          var sends = {
  4350.                   procotol: 'p2p',
  4351.                   name: name,
  4352.                   to: toUserId,
  4353.                   msg: '语音播报'
  4354.                 };
  4355.         ws.send(JSON.stringify(sends));
  4356.     }
  4357.     $.post('/user.php?c=chrome&a=pash_message',{order_no:orderNo},function(){})
  4358. }
  4359. function payResult(r) {
  4360.     if(r == 0){
  4361.         motify.log('支付成功');
  4362.         audioapi();
  4363.         setTimeout(function(){
  4364.         window.location.href = './order.php?orderno='+orderNo;
  4365.         },3000)
  4366.     }else{
  4367.      motify.log('支付失败');
  4368.      audioapi();
  4369.      setTimeout(function(){
  4370.      window.location.href = './order.php?orderno='+orderNo;
  4371.      },3000)
  4372.  
  4373.     }
  4374. }
  4375. pavnotice.php文件

  4376.  
  4377. <?php
  4378. /**
  4379.  *  支付异步通知
  4380.  */
  4381. require_once dirname(__FILE__) . '/global.php';
  4382. /*/$payinfo = '<xml><appid><![CDATA[wxbb354c810c07bcd8]]></appid>
  4383. <bank_type><![CDATA[CFT]]></bank_type>
  4384. <cash_fee><![CDATA[1]]></cash_fee>
  4385. <fee_type><![CDATA[CNY]]></fee_type>
  4386. <is_subscribe><![CDATA[N]]></is_subscribe>
  4387. <mch_id><![CDATA[1439024602]]></mch_id>
  4388. <nonce_str><![CDATA[BBLuiXNmjZxLh4JyyFvi5vCILDH2PaoR]]></nonce_str>
  4389. <openid><![CDATA[ob_bdwL5XuIbldXwjVzphG56SPzg]]></openid>
  4390. <out_trade_no><![CDATA[20180817115335574966]]></out_trade_no>
  4391. <result_code><![CDATA[SUCCESS]]></result_code>
  4392. <return_code><![CDATA[SUCCESS]]></return_code>
  4393. <sign><![CDATA[9FD35DCE58C54253063144525D25B3AD]]></sign>
  4394. <time_end><![CDATA[20180817115342]]></time_end>
  4395. <total_fee>1</total_fee>
  4396. <trade_type><![CDATA[APP]]></trade_type>
  4397. <transaction_id><![CDATA[4200000178201808171055789366]]></transaction_id>
  4398. </xml>';*/
  4399. $payType = isset($_REQUEST['pay_type']) ? $_REQUEST['pay_type'] : (isset($_REQUEST['attach']) ? $_REQUEST['attach'] : 'weixin');
  4400. //file_put_contents('./app_payin.txt', file_get_contents('php://input'));
  4401. // 支付宝支付
  4402. if ($_POST['app_id'] == '2018012902101926') {
  4403.     $payType = 'alipay';
  4404. }
  4405. $payMethodList = M('Config')->getPlatformPayMethod(true);
  4406.  
  4407. $payMethodList['test'] = '测试支付';
  4408. $payMethodList['eb_pay'] = 'E币支付';
  4409. if (empty($payMethodList[$payType]) && $payType != 'alipay' && $payType != 'weixin') {
  4410.     json_return(1009, '您选择的支付方式不存在<br/>请更新支付方式');
  4411. }
  4412. if ($payType == 'weixi_peerpay') {
  4413.     if (empty($payMethodList['weixin'])) {
  4414.         json_return(1009, '您选择的支付方式不存在<br/>请更新支付方式');
  4415.     }
  4416. } else if ($payType == 'weixin') {
  4417.     if (empty($payMethodList['weixin']) && empty($payMethodList['platform_weixin'])) {
  4418.         json_return(1009, '您选择的支付方式不存在<br/>请更新支付方式');
  4419.     }
  4420. } else if ($payType == 'alipay') {
  4421.     if (empty($payMethodList[$payType]) && empty($payMethodList['platform_alipay'])) {
  4422.         json_return(1009, '您选择的支付方式不存在<br/>请更新支付方式alipay');
  4423.     }
  4424. } else {
  4425.     if (empty($payMethodList[$payType])) {
  4426.         json_return(1009, '您选择的支付方式不存在<br/>请更新支付方式');
  4427.     }
  4428. }
  4429. if ($payType == 'yeepay') {
  4430.     import('source.class.pay.Yeepay');
  4431.     $payClass = new Yeepay(array(), $payMethodList[$payType]['config'], $wap_user);
  4432.     $payInfo = $payClass->notice();
  4433.     pay_notice_call($payInfo);
  4434. } else if ($payType == 'tenpay') {
  4435.     import('source.class.pay.Tenpay');
  4436.     $payClass = new Tenpay(array(), $payMethodList[$payType]['config'], $wap_user);
  4437.     $payInfo = $payClass->notice();
  4438.     pay_notice_call($payInfo);
  4439. } else if ($payType == 'test') { //测试支付 正式环境中需删除
  4440.     $payInfo = array();
  4441.     $payInfo['order_param']['trade_no'] = $_REQUEST['trade_no'];
  4442.     $payInfo['order_param']['third_id'] = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(1000000000, 9999999999);
  4443.     $payInfo['order_param']['pay_money'] = $_REQUEST['pay_money'];
  4444.     $payInfo['order_param']['pay_type'] = $_REQUEST['pay_type'];
  4445.     $payInfo['err_code'] = 0;
  4446.     pay_notice_call($payInfo);
  4447. }else if($payType == 'eb_pay'){
  4448.     $payInfo = array();
  4449.     $payInfo['order_param']['trade_no'] = $_REQUEST['trade_no'];
  4450.     $payInfo['order_param']['third_id'] = date('YmdHis', $_SERVER['REQUEST_TIME']) . mt_rand(1000000000, 9999999999);
  4451.     $payInfo['order_param']['pay_money'] = $_REQUEST['pay_money'];
  4452.     $payInfo['order_param']['pay_type'] = $_REQUEST['pay_type'];
  4453.     $payInfo['err_code'] = 0;
  4454.     pay_notice_call($payInfo);
  4455. } else if ($payType == 'weixin_peerpay') {
  4456.     import('source.class.pay.Weixin');
  4457.     $payClass = new Weixin(array(), $payMethodList['weixin']['config'], $wap_user, '');
  4458.     $payInfo = $payClass->notice();
  4459.     // D('Aaep_api_log')->data(['type'=>'ceshi','time'=>time(),'content'=>'weixindaifu'])->add();
  4460.     // file_put_contents('./peerpay.txt',json_encode($payInfo));
  4461.     if ($payInfo['err_code'] === 0) {
  4462.         peerpay_notice_call($payInfo, $payInfo['echo_content']);
  4463.     } else {
  4464.         peerpay_notice_call($payInfo);
  4465.     }
  4466. } else if ($payType == 'alipay') {
  4467.         import('source.class.Alipay');
  4468.         $payClass = new Alipay();
  4469.         $payInfo = $payClass->notice($_POST);
  4470.         pay_notice_call($payInfo);
  4471. } else if ($payType == 'allinpay') {
  4472.     $payConfig = $payMethodList['allinpay']['config'];
  4473.     foreach($payConfig as $key_config => $item_config){
  4474.         $count_arrs = explode(',', $item_config);
  4475.         if(count($count_arrs)>1){
  4476.             $payConfig[$key_config] = $count_arrs[1];
  4477.         }else{
  4478.             $payConfig[$key_config] = $count_arrs[0];
  4479.         }
  4480.     }
  4481.     $pay_config['pay_allinpay_merchantid']  = $payConfig['pay_allinpay_merchantid'];
  4482.     $pay_config['pay_allinpay_merchantkey'] = $payConfig['pay_allinpay_merchantkey'];
  4483.  
  4484.     import('source.class.pay.Allinpay');
  4485.     $payClass = new Allinpay(array(), $pay_config, $wap_user);
  4486.     $payInfo = $payClass->return_url();
  4487.     pay_notice_call($payInfo);
  4488. //}else if ($payType == 'weixin') {
  4489. }else if (!empty(file_get_contents('php://input'))) {
  4490.     // 对返回的数据进处理,判断是否是从APP支付
  4491.     file_put_contents('./12.txt', file_get_contents('php://input'));//
  4492.     $xml = file_get_contents('php://input');

        if($array_data['trade_type'] == 'pay.weixin.jspay' || $array_data['trade_type'] == 'pay.alipay.jspay' || $array_data['trade_type'] == 'pay.weixin.native'){
            //验签
            file_put_contents('./2.txt', file_get_contents('php://input'));
            if($array_data['status'] == 0 && $array_data['result_code'] == 0){
                //获取商家的支付密钥
                $orderinfo = D('Order')->where(['trade_no'=>$array_data['out_trade_no']])->find();
                $storeinfo = D('Store')->field('pay_secret,pay_public_key')->where(['store_id'=>$orderinfo['store_id']])->find();
                //md5验签
                if( $array_data['sign_type'] != 'RSA_1_256'){
                    $sign=$array_data['sign'];
                    unset($array_data['sign']);
                    ksort($array_data);
                    $string='';
                    foreach($array_data as $k=>$v){
                        $string.="$k=$v&";
                    }
                    $string.='key='.$storeinfo['pay_secret'];
                    $newsign = strtoupper(md5($string));
                    if($sign!=$newsign){
                        logs('验签结果',$sign.'--'.$newsign);
                        json_return(10001, '验签不正确');
                    }
                }else if($array_data['sign_type'] == 'RSA_1_256'){//rsa验签
                    if(!verifyRSASign($array_data,$storeinfo['pay_public_key'])){
                         logs('验签结果','验签失败'.$orderinfo['order_id']);
                        json_return(10001, '验签不正确');
                    }
                }
                $payInfo = array();
                $payInfo['order_param']['trade_no'] = $array_data['out_trade_no'];
                $payInfo['order_param']['third_id'] = $array_data['transaction_id'];//第三方
                $payInfo['order_param']['pay_money'] = $array_data['total_fee']/100;
                if($array_data['trade_type'] == 'pay.weixin.jspay' || $array_data['trade_type'] == 'pay.weixin.native'){
  4493.     $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  4494.                 $payInfo['order_param']['pay_type'] = 'weixin';
  4495.             }else{
  4496.                 $payInfo['order_param']['pay_type'] = 'alipay';
  4497.             }
  4498.             $payInfo['order_param']['third_data'] = $array_data;
  4499.             $payInfo['err_code'] = 0;
  4500.             //file_put_contents('./lala.txt', json_encode($payInfo['order_param']));
  4501.             pay_notice_call($payInfo);
  4502.         }
  4503.     }else{
  4504.         $pay_method = $payMethodList[$payType]['config'];
  4505.         if ($array_data['trade_type'] == 'APP') {
  4506.             //$pay_method = $payMethodList['weixinapp']['config'];
  4507.             $pay_method['pay_weixin_appid'] = option('config.pay_weixin_app_appid');
  4508.             $pay_method['pay_weixin_mchid'] = option('config.pay_weixin_app_mchid');
  4509.             $pay_method['pay_weixin_key'] = option('config.pay_weixin_app_key');
  4510.         }
  4511.         if (strpos($array_data['out_trade_no'], 'PMPAY') !== FALSE) {
  4512.             $pay_method['pay_weixin_appid'] = option('config.platform_weixin_appid');
  4513.             $pay_method['pay_weixin_mchid'] = option('config.platform_weixin_mchid');
  4514.             $pay_method['pay_weixin_key'] = option('config.platform_weixin_key');
  4515.         }
  4516.         import('source.class.pay.Weixin');
  4517.         //dump($pay_method);
  4518.         $payClass = new Weixin(array(), $pay_method, $wap_user, '');
  4519.         $payInfo = $payClass->notice($xml);
  4520.         if ($array_data['trade_type'] == 'APP') {
  4521.             $payInfo['trade_type_app'] = 'APP';
  4522.         }
  4523.         if ($payInfo['err_code'] === 0) {
  4524.             $trade_no = $payInfo['order_param']['trade_no'];
  4525.             // D('Aaep_api_log')->data(['type'=>'ceshi1','time'=>time(),'content'=>$trade_no])->add();
  4526.             if (strpos($trade_no, 'PEERPAY') !== FALSE) {
  4527.                 peerpay_notice_call($payInfo, $payInfo['echo_content']);
  4528.             } elseif (strpos($trade_no, 'SMSPAY') !== FALSE) {
  4529.                 smspay_notice_call($payInfo, $payInfo['echo_content']);
  4530.             } elseif(strpos($trade_no, 'ZCPAY') !==FALSE){
  4531.                 zcpay_notice_call($payInfo, $payInfo['echo_content']);
  4532.             } elseif(strpos($trade_no, 'DBPAY') !==FALSE){
  4533.                 dbpay_notice_call($payInfo, $payInfo['echo_content']);
  4534.             } elseif (strpos($array_data['out_trade_no'], 'PMPAY') !== FALSE) {
  4535.                 pmp_notice_call($payInfo, $payInfo['echo_content']);
  4536.             } else {
  4537.                 pay_notice_call($payInfo, $payInfo['echo_content']);
  4538.             }
  4539.         } else {
  4540.             pay_notice_call($payInfo);
  4541.         }
  4542.     }
  4543. }
  4544. //威富通rsa验签
  4545. function verifyRSASign($array_data,$pay_public_key) {
  4546.     $signPars = "";
  4547.     ksort($array_data);
  4548.     foreach($array_data as $k => $v) {
  4549.         if("sign" != $k && "" != $v) {
  4550.             $signPars .= $k . "=" . $v . "&";
  4551.         }
  4552.     }
  4553.     $signPars = substr($signPars, 0, strlen($signPars) - 1);
  4554.     $res = openssl_get_publickey($pay_public_key);
  4555.     $result = (bool)openssl_verify($signPars, base64_decode($array_data['sign']), $res, OPENSSL_ALGO_SHA256);
  4556.     openssl_free_key($res);
  4557.     return $result;
  4558. }
  4559. //对接签名
  4560. function getSign($data, $salt)
  4561. {
  4562.     foreach ($data as $key => $value) {
  4563.         if (is_array($value)) {
  4564.             $validate[$key] = getSign($value, $salt);
  4565.         } else {
  4566.             $validate[$key] = $value;
  4567.         }
  4568.     }
  4569.     $validate['salt'] = $salt;
  4570.     sort($validate, SORT_STRING);
  4571.     return sha1(implode($validate));
  4572. }
  4573. function peerpay_notice_call($payInfo, $ok_msg = 'success', $err_msg = 'fail')
  4574. {
  4575.     if ($payInfo['err_code'] === 0) {
  4576.         $where = array();
  4577.         $where['peerpay_no'] = $payInfo['order_param']['trade_no'];
  4578.         $order_peerpay = D('Order_peerpay')->where($where)->find();
  4579.         if ($order_peerpay && $order_peerpay['status'] == '0') {
  4580.             $data = array();
  4581.             $data['pay_dateline'] = time();
  4582.             $data['third_id'] = $payInfo['order_param']['third_id'];
  4583.             $data['third_data'] = serialize($payInfo['order_param']['third_data']);
  4584.             $data['status'] = 1;
  4585.             $result = D('Order_peerpay')->where($where)->data($data)->save();
  4586.             if ($result) {
  4587.                 // 查看是否支付完成,支付完成更改总订状态
  4588.                 $pay_money = M('Order_peerpay')->sumMoney($order_peerpay['order_id']);
  4589.                 $order = D('Order')->where(array('order_id' => $order_peerpay['order_id']))->find();
  4590.                 // D('Aaep_api_log')->data(['type'=>'ceshi4','time'=>time(),'content'=>'weixindaifu4'])->add();
  4591.                 if (!empty($order) && $order['total'] <= $pay_money) {
  4592.                     $trade_no = date('YmdHis') . mt_rand(100000, 999999);
  4593.                     D('Order')->where(array('order_id' => $order_peerpay['order_id']))->data(array('trade_no' => $trade_no))->save();
  4594.                     // 更改订单状态
  4595.                     $order_info = array();
  4596.                     $order_info['order_param']['trade_no'] = $trade_no;
  4597.                     $order_info['order_param']['pay_type'] = 'peerpay';
  4598.                     $order_info['order_param']['pay_money'] = $order['total'];
  4599.                     $order_info['order_param']['third_id'] = $payInfo['order_param']['third_id'];
  4600.                     $order_info['err_code'] = 0;
  4601.                     pay_notice_call($order_info);
  4602.                 }
  4603.                 exit($ok_msg);
  4604.             } else {
  4605.                 exit($err_msg);
  4606.             }
  4607.         } else {
  4608.             exit($err_msg);
  4609.         }
  4610.     } else {
  4611.         exit($ok_msg);
  4612.     }
  4613. }
  4614. // 众筹支付回调
  4615. function zcpay_notice_call($payInfo, $ok_msg = 'success', $err_msg = 'fail'){
  4616.         if ($payInfo['err_code'] === 0) {
  4617.             $data_order = $where_order = $data = $where = array();
  4618.             $where['trade_no'] = $payInfo['order_param']['trade_no'];
  4619.             $order = D('Invest_order')->where($where)->find();
  4620.             if($order['order_type'] == 1){
  4621.                 if (!empty($order) && $order['status'] == '1') {
  4622.                     $data['pay_time'] = $_SERVER['REQUEST_TIME'];
  4623.                     $data['third_id'] = $payInfo['order_param']['third_id'];
  4624.                     $data['third_data'] = serialize($payInfo['order_param']['third_data']);
  4625.                     $data['pay_openid'] = $payInfo['order_param']['third_data']['openid'];
  4626.                     $data['status'] = '2';
  4627.                     $effid = D('Invest_order')->where($where)->data($data)->save();
  4628.                     if (!empty($effid)) {
  4629.                         $where_order['project_id']=$order['project_id'];
  4630.                         $where_order['status']='2';
  4631.                         $proList=D('Invest_order')->where($where_order)->select();
  4632.                         $all_intention_amount = 0 ;
  4633.                         $maxShareholder = $minShareholder = 0;
  4634.                         if(!empty($proList)){
  4635.                             foreach ($proList as $k => $v) {
  4636.                                 $all_intention_amount += $v['intention_amount'];
  4637.                                 if($v['type']==2){
  4638.                                     $maxShareholder++;
  4639.                                 }
  4640.                                 if($v['type']==1){
  4641.                                     $minShareholder++;
  4642.                                 }
  4643.                             }
  4644.                         }
  4645.                         $data_order = 'collect='.$all_intention_amount.',invest_number=invest_number+1';
  4646.                         D('Project')->where(array('project_id'=>$order['project_id']))->data($data_order)->save();
  4647.                         exit($ok_msg);
  4648.                     } else {
  4649.                         exit($err_msg);
  4650.                     }
  4651.                 } else {
  4652.                     exit($err_msg);
  4653.                 }
  4654.             } else{
  4655.  
  4656.                 if (!empty($order) && $order['order_status'] == '1') {
  4657.                                         $data['extract_number'] =  time().mt_rand(100000,999999);
  4658.                     $data['pay_time'] = $_SERVER['REQUEST_TIME'];
  4659.                     $data['third_id'] = $payInfo['order_param']['third_id'];
  4660.                     $data['third_data'] = serialize($payInfo['order_param']['third_data']);
  4661.                     $data['pay_openid'] = $payInfo['order_param']['third_data']['openid'];
  4662.                     $data['order_status'] = '2';
  4663.                     $effid = D('Invest_order')->where($where)->data($data)->save();
  4664.                     if (!empty($effid)) {
  4665.                                             $databases_zc_product = D('Zc_product');
  4666.                                             $productInfo = $databases_zc_product->where(array('product_id'=>$order['project_id']))->find();
  4667.                                             $people_number = $productInfo['people_number']+1;
  4668.                                             $collect = $productInfo['collect']+$order['pay_money'];
  4669.                                             $pInfo = $databases_zc_product->where(array('product_id'=>$order['project_id']))->data(array('people_number'=>$people_number,'collect'=>$collect))->save();
  4670.                                             D('Zc_product_repay')->where(array('repay_id'=>$order['repay_id']))->data('`collect_nub` = `collect_nub`+1')->save();
  4671.                         exit($ok_msg);
  4672.                     } else {
  4673.                         exit($err_msg);
  4674.                     }
  4675.                 } else {
  4676.                     exit($err_msg);
  4677.                 }
  4678.             }
  4679.         } else {
  4680.             exit($err_msg);
  4681.         }
  4682. }
  4683. // 夺宝活动支付回调
  4684. function dbpay_notice_call($payInfo, $ok_msg = 'success', $err_msg = 'fail') {
  4685.     if ($payInfo['err_code'] === 0) {
  4686.         $where = array();
  4687.         $where['trade_no'] = $payInfo['order_param']['trade_no'];
  4688.         $unitary_order = D('Unitary_order')->where($where)->find();
  4689.         $data['paytime'] = time();
  4690.         $data['third_id'] = $payInfo['order_param']['third_id'];
  4691.         $data['third_data'] = serialize($payInfo['order_param']['third_data']);
  4692.         $data['pay_openid'] = $payInfo['order_param']['third_data']['openid'];
  4693.         $data['paid'] = 1;
  4694.         $data['total'] = $payInfo['order_param']['pay_money'];
  4695.         $data['paytype'] = $payInfo['order_param']['pay_type'];
  4696.         // $data['addtime'] = 0;
  4697.         $result = D('Unitary_order')->where($where)->data($data)->save();
  4698.         if ($result) {
  4699.             // 更新活动表的订单信息
  4700.             // $return_url = option('config.site_url').'/webapp.php?c=unitary&a=dobuy&orderid='.$unitary_order['orderid'];
  4701.             // redirect($return_url);
  4702.             exit($ok_msg);
  4703.         } else {
  4704.             exit($err_msg);
  4705.         }
  4706.     } else {
  4707.         exit($ok_msg);
  4708.     }
  4709. }
  4710. //短信支付回调
  4711. function smspay_notice_call($payInfo, $ok_msg = 'success', $err_msg = 'fail') {
  4712.     if ($payInfo['err_code'] === 0) {
  4713.         $where = array();
  4714.         // $where['trade_no'] = $payInfo['order_param']['trade_no'];
  4715.         $where['sms_pay_no'] = $payInfo['order_param']['trade_no'];
  4716.        /* file_put_contents('./221.txt',json_encode($where));
  4717.         file_put_contents('./222.txt',json_encode($payInfo));*/
  4718.         $order_sms = D('Order_sms')->where($where)->find();
  4719.          // file_put_contents('./121.txt',json_encode($order_sms));
  4720.         if ($order_sms && $order_sms['status'] == '0') {
  4721.             $data = array();
  4722.             $data['pay_dateline'] = time();
  4723.             $data['third_id'] = $payInfo['order_param']['third_id'];
  4724.             $data['third_data'] = serialize($payInfo['order_param']['third_data']);
  4725.             $data['pay_openid'] = $payInfo['order_param']['third_data']['openid'];
  4726.             $data['status'] = 1;
  4727.             // file_put_contents('./12.txt',json_encode($data));
  4728.             $result = D('Order_sms')->where($where)->data($data)->save();
  4729.             // file_put_contents('./11.txt',json_encode($result));
  4730.             if ($result) {
  4731.                 $user_data = "smscount=smscount+" . $order_sms['sms_num'];
  4732.                 $uid = $order_sms['uid'];
  4733.                 $a = D('User')->where(array('uid' => $uid))->data($user_data)->save();
  4734.                 // file_put_contents('./111.txt',json_encode($a));
  4735.                 exit($ok_msg);
  4736.             } else {
  4737.                 exit($err_msg);
  4738.             }
  4739.         } else {
  4740.             exit($err_msg);
  4741.         }
  4742.     } else {
  4743.         exit($ok_msg);
  4744.     }
  4745. }
  4746. // 平台保证金支付回调
  4747. function pmp_notice_call($payInfo, $ok_msg = 'sucess', $err_msg = 'fail') {
  4748.     global $payType;
  4749.     if ($payInfo['err_code'] === 0) {
  4750.         $trade_no_arr = explode('_', $payInfo['order_param']['trade_no']);
  4751.         $where = array();
  4752.         if ($payType == 'alipay') {
  4753.             $where['order_no'] = ltrim($trade_no_arr[0], 'PMPAY');
  4754.         } else {
  4755.             $where['trade_no'] = ltrim($trade_no_arr[count($trade_no_arr) - 1], 'PMPAY');
  4756.         }
  4757.         $platform_margin_log = D('Platform_margin_log')->where($where)->find();
  4758.         if ($platform_margin_log && $platform_margin_log['status'] != '2') {
  4759.             Margin::init($platform_margin_log['store_id']);
  4760.             Margin::recharge($platform_margin_log['order_no'], $payInfo['order_param']['third_id'], $payInfo['order_param']['pay_money'], $payInfo['order_param']['pay_type'], 2);
  4761.             exit($ok_msg);
  4762.         } else {
  4763.             exit($err_msg);
  4764.         }
  4765.     } else {
  4766.         exit($ok_msg);
  4767.     }
  4768. }
  4769. function pay_notice_call($payInfo, $ok_msg = 'success', $err_msg = 'fail') {
  4770.     if ($payInfo['err_code'] === 0) {
  4771.         D('Aaep_api_log')->data(['type'=>'回调数据','time'=>date('YmdHis'),'content'=>json_encode($payInfo)])->add();
  4772.         import('source.class.OrderPay');
  4773.         $pay = new OrderPay();
  4774.         $result = $pay->pay_callback($payInfo['order_param']['trade_no'], $payInfo['order_param']['pay_money'], $payInfo['order_param']['pay_type'], $payInfo['order_param']['third_id'], $payInfo['order_param']['third_data']);
  4775.         D('Aaep_api_log')->data(['type'=>'回调结果','time'=>date('YmdHis'),'content'=>$result['err_msg']])->add();
  4776.         if (empty($result['err_code'])) {
  4777.             exit($ok_msg);
  4778.         } else {
  4779.             exit($result['err_msg']);
  4780.         }
  4781.     } else {
  4782.         exit($ok_msg);
  4783.     }
  4784. }
  4785.  
  4786. ?>
     
  4787.  

猜你喜欢

转载自blog.csdn.net/xunhuanxiaogongzhu/article/details/81665184