load->helper('payment'); $this->config->load('wxpay', true); $this->config->load('paypal', true); $this->load->model('Online_payment_note_model', 'note_model'); $this->load->model('Online_payment_account_model', 'account_model'); } public function index() { } public function send_notify($transaction_id=NULL, $old_ssje=NULL) { log_message('error','send_notify begin ----'); // exit(); $data = array(); $show_index = 0; //优先处理指定的交易号,用于修正交易号直接发送通知 if ( ! empty($transaction_id)) { $data['unsend_list'] = $this->note_model->get_note($transaction_id); } // 待处理的 if (empty($data['unsend_list'])) { $data['unsend_list'] = $this->note_model->unsend_note(10); } //没有未处理的数据再查找处理失败的数据 if (empty($data['unsend_list'])) { $data['unsend_list'] = $this->note_model->sendfail_note(20); } // 开始处理 foreach ($data['unsend_list'] as $key => $item) { //显示处理记录 if (empty($transaction_id)) { echo ++$show_index . ' ' . $item->OPN_transactionId . '
'; } // 只处理完成状态 if ($item->OPN_transactionResult != 'completed') { continue; } if ($item->OPN_noticeType == 'Refunded') { // 退款处理 continue ; } // 提取订单号 $orderid_info = analysis_orderid($item->OPN_orderId); // 先用已设置过的 if (empty($orderid_info)) { $orderid_info = $this->method_analysis_orderid($item->OPN_accountMethod, $item->OPN_rawContent); if (empty($orderid_info)) { $this->note_model->update_send($item->OPN_SN, $item->OPN_transactionId, 'sendfail'); continue; } } $orderid_info = json_decode($orderid_info); // TODO Trippest的订单号要特别查询 // 填入提取到的订单号 $this->note_model->set_invoice($item->OPN_SN, $orderid_info->orderid . '_' . $orderid_info->ordertype); // APP自动出票的收款 跳过 if ($orderid_info->ordertype === 'A' && $item->OPN_noticeType === 'pay') { $this->note_model->update_send($item->OPN_SN, $item->OPN_transactionId, 'closed'); continue; } // 开始查找订单和录入 $handpick = empty($transaction_id) ? false : true; $advisor_info = $this->account_model->get_order($orderid_info->orderid, false, $orderid_info->ordertype, $handpick); $ssje = $this->account_model->get_ssje($item->OPN_orderAmount, $item->OPN_accountMethod, mb_strtoupper($item->OPN_currency)); $ssje = $old_ssje===NULL ? $ssje : $old_ssje; $ht_memo = '交易号(自动录入):' . $item->OPN_transactionId; if ( ! isset($advisor_info->ordertype)) { // record fail $this->note_model->update_send($item->OPN_SN, $item->OPN_transactionId, 'sendfail'); continue; } $COLI_SN = isset($advisor_info->COLI_SN) ? $advisor_info->COLI_SN : 0; $update_note_column = array(); if ($advisor_info->ordertype == 0) { /* 商务订单 */ if (substr($advisor_info->COLI_WebCode, 0, 6) == 'CHTAPP') { /* APP */ $this->account_model->add_account_info_forAPP( $COLI_SN, $item->OPN_accountMethod, $advisor_info->COLI_ID, $item->OPN_orderAmount, $item->OPN_completeTime, mb_strtoupper($item->OPN_currency), $ssje, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_payerName, $item->OPN_payerEmail, $item->OPN_transactionId, $ht_memo ); if ($advisor_info->COLI_WebCode == 'CHTAPP' && $advisor_info->COLI_State == 11) { //只修改APP组的订单状态,并且订单进度是我的订单 $this->account_model->update_biz_coli_state($COLI_SN, 8); //把订单状态改为已付款 $this->account_model->insert_biz_order_log($COLI_SN, 'BS8'); } } else { /* 其他商务订单 */ // 第一次录入收款记录时变更状态,记录日志 if (false == $this->account_model->if_biz_gai_exists($item->OPN_transactionId) ) { $this->account_model->update_biz_coli_state($COLI_SN, 13); $this->account_model->insert_biz_order_log($COLI_SN, 'BS13'); } $this->account_model->add_account_info( $COLI_SN, $item->OPN_accountMethod, $advisor_info->COLI_ID, $item->OPN_orderAmount, $item->OPN_completeTime, mb_strtoupper($item->OPN_currency), $ssje, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_payerName, $item->OPN_payerEmail, $item->OPN_transactionId, $ht_memo ); // 更新订单主表付款方式,防止没访问thankyou-train.asp $this->account_model->update_paymanner($COLI_SN, $item->OPN_accountMethod); } // 更新note $update_note_column['OPN_accountType'] = 'B'; $update_note_column['OPN_accountStatus'] = 'recorded'; $update_note_column['OPN_accountTime'] = date('Y-m-d H:i:s'); } elseif ($advisor_info->ordertype == 1) { /* 传统 */ $gai_sn = $this->account_model->add_tour_account_info( $COLI_SN, $item->OPN_accountMethod, $item->OPN_orderAmount, $item->OPN_completeTime, mb_strtoupper($item->OPN_currency), $ssje, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_completeTime, $item->OPN_payerName, $item->OPN_payerEmail, $item->OPN_transactionId, $ht_memo ); //添加汉特的订单提醒 $this->account_model->update_coli_introduction($COLI_SN, '已支付 ' . mb_strtoupper($item->OPN_currency) . $item->OPN_orderAmount); // 添加HT任务 $this->account_model->exec_addToTask($gai_sn); // 更新note $update_note_column['OPN_accountType'] = 'B'; $update_note_column['OPN_accountStatus'] = 'recorded'; $update_note_column['OPN_accountTime'] = date('Y-m-d H:i:s'); } // 更新note if ( ! empty($update_note_column)) { $where = " OPN_SN=" . $item->OPN_SN; $this->note_model->update_note($where, $update_note_column); } // 邮件外联 $opi_email = !empty($advisor_info->OPI_Email) ? $advisor_info->OPI_Email : ''; $opi_firstname = !empty($advisor_info->OPI_FirstName) ? $advisor_info->OPI_FirstName : !empty($advisor_info->OPI_Name) ? $advisor_info->OPI_Name : ''; //没有外联信息表示订单未分配 if (empty($opi_email) || empty($opi_firstname)) { $this->note_model->update_send($item->OPN_SN, $item->OPN_transactionId, 'sendfail'); continue; } //添加邮件发送记录 //给外联发送通知邮件 $fromName = !empty($item->OPN_payerName) ? $item->OPN_payerName : ''; $fromEmail = !empty($item->OPN_payerEmail) ? $item->OPN_payerEmail : ''; $toName = !empty($opi_firstname) ? $opi_firstname : ''; $toEmail = !empty($opi_email) ? $opi_email : ''; $subject = $orderid_info->orderid . '_' . $orderid_info->ordertype . ' / ' . $item->OPN_orderAmount . $item->OPN_currency . ' / ' . $fromName; $body = $this->load->view('mail_templete', $item, true); //$item->pn_memo; $M_RelatedInfo = $item->OPN_SN; $M_AddTime = $item->OPN_completeTime; $M_State = 0; $this->account_model->save_automail($fromName, $fromEmail, $toName, $toEmail, $subject, $body, $M_RelatedInfo, $M_State, $M_AddTime, 'payment note', 'payment note'); //添加邮件发送记录 end $this->note_model->update_send($item->OPN_SN, $item->pn_txn_id, 'send'); } return; // return $this->output->set_content_type('application/json')->set_output(json_encode($data)); } /** 支付方式参数对应的配置文件名 */ public function method_name($name) { $config_name = 'paypal'; switch ($name) { case 'paypal': $config_name = 'paypal'; break; case 'weixin': $config_name = 'wxpay'; break; case 'ipaylinks': $config_name = 'iPayLinks'; break; case 'alipay': $config_name = 'alipay'; break; default: # code... break; } return $config_name; } private function method_analysis_orderid($name, $raw_content) { $content_obj = json_decode($raw_content); $orderid_info = array(); switch (strval($name)) { case '15002': case '15010': // paypal $orderid_info = analysis_orderid($content_obj->invoice); empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->transaction_subject) : NULL; empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->custom) : NULL; empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->item_name) : NULL; empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->item_name1) : NULL; empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->item_number) : NULL; empty($orderid_info) ? $orderid_info = analysis_orderid($content_obj->item_number1) : NULL; break; case '15016': // wxpay $orderid_info = analysis_orderid($content_obj->out_trade_no); break; case '15018': // iPaylinks break; case '15015': // alipay break; default: # code... break; } return $orderid_info; } }