diff options
Diffstat (limited to 'public/catalog/controller/extension/payment/wechat_pay.php')
-rw-r--r-- | public/catalog/controller/extension/payment/wechat_pay.php | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/public/catalog/controller/extension/payment/wechat_pay.php b/public/catalog/controller/extension/payment/wechat_pay.php new file mode 100644 index 0000000..0affd0c --- /dev/null +++ b/public/catalog/controller/extension/payment/wechat_pay.php @@ -0,0 +1,134 @@ +<?php +/** + * @package OpenCart + * @author Meng Wenbin + * @copyright Copyright (c) 2010 - 2017, Chengdu Guangda Network Technology Co. Ltd. (https://www.opencart.cn/) + * @license https://opensource.org/licenses/GPL-3.0 + * @link https://www.opencart.cn + */ + +class ControllerExtensionPaymentWechatPay extends Controller { + public function index() { + $data['button_confirm'] = $this->language->get('button_confirm'); + + $data['redirect'] = $this->url->link('extension/payment/wechat_pay/qrcode'); + + return $this->load->view('extension/payment/wechat_pay', $data); + } + + public function qrcode() { + $this->load->language('extension/payment/wechat_pay'); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('catalog/view/javascript/qrcode.js'); + + $data['breadcrumbs'] = array(); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/home') + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_checkout'), + 'href' => $this->url->link('checkout/checkout', '', true) + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_qrcode'), + 'href' => $this->url->link('extension/payment/wechat_pay/qrcode') + ); + + $this->load->model('checkout/order'); + + $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); + + $order_id = trim($order_info['order_id']); + $data['order_id'] = $order_id; + $subject = trim($this->config->get('config_name')); + $currency = $this->config->get('payment_wechat_pay_currency'); + $total_amount = trim($this->currency->format($order_info['total'], $currency, '', false)); + $notify_url = HTTPS_SERVER . "payment_callback/wechat_pay"; //$this->url->link('wechat_pay/callback'); + + $options = array( + 'appid' => $this->config->get('payment_wechat_pay_app_id'), + 'appsecret' => $this->config->get('payment_wechat_pay_app_secret'), + 'mch_id' => $this->config->get('payment_wechat_pay_mch_id'), + 'partnerkey' => $this->config->get('payment_wechat_pay_api_secret') + ); + + \Wechat\Loader::config($options); + $pay = new \Wechat\WechatPay(); + + $result = $pay->getPrepayId(NULL, $subject, $order_id, $total_amount * 100, $notify_url, $trade_type = "NATIVE", NULL, $currency); + + $data['error'] = ''; + $data['code_url'] = ''; + if($result === FALSE){ + $data['error_warning'] = $pay->errMsg; + } else { + $data['code_url'] = $result; + } + + $data['action_success'] = $this->url->link('checkout/success'); + + $data['column_left'] = $this->load->controller('common/column_left'); + $data['column_right'] = $this->load->controller('common/column_right'); + $data['content_top'] = $this->load->controller('common/content_top'); + $data['content_bottom'] = $this->load->controller('common/content_bottom'); + $data['footer'] = $this->load->controller('common/footer'); + $data['header'] = $this->load->controller('common/header'); + + $this->response->setOutput($this->load->view('extension/payment/wechat_pay_qrcode', $data)); + } + + public function isOrderPaid() { + $json = array(); + + $json['result'] = false; + + if (isset($this->request->get['order_id'])) { + $order_id = $this->request->get['order_id']; + + $this->load->model('checkout/order'); + $order_info = $this->model_checkout_order->getOrder($order_id); + + if ($order_info['order_status_id'] == $this->config->get('payment_wechat_pay_completed_status_id')) { + $json['result'] = true; + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function callback() { + $options = array( + 'appid' => $this->config->get('payment_wechat_pay_app_id'), + 'appsecret' => $this->config->get('payment_wechat_pay_app_secret'), + 'mch_id' => $this->config->get('payment_wechat_pay_mch_id'), + 'partnerkey' => $this->config->get('payment_wechat_pay_api_secret') + ); + + \Wechat\Loader::config($options); + $pay = new \Wechat\WechatPay(); + $notifyInfo = $pay->getNotify(); + + if ($notifyInfo === FALSE) { + $this->log->write('Wechat Pay Error: ' . $pay->errMsg); + } else { + if ($notifyInfo['result_code'] == 'SUCCESS' && $notifyInfo['return_code'] == 'SUCCESS') { + $order_id = $notifyInfo['out_trade_no']; + $this->load->model('checkout/order'); + $order_info = $this->model_checkout_order->getOrder($order_id); + if ($order_info) { + $order_status_id = $order_info["order_status_id"]; + if (!$order_status_id) { + $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_wechat_pay_completed_status_id')); + } + } + return xml(['return_code' => 'SUCCESS', 'return_msg' => 'DEAL WITH SUCCESS']); + } + } + } +} |