wechat_pay.php (4880B)
1 <?php 2 /** 3 * @package OpenCart 4 * @author Meng Wenbin 5 * @copyright Copyright (c) 2010 - 2017, Chengdu Guangda Network Technology Co. Ltd. (https://www.opencart.cn/) 6 * @license https://opensource.org/licenses/GPL-3.0 7 * @link https://www.opencart.cn 8 */ 9 10 class ControllerExtensionPaymentWechatPay extends Controller { 11 public function index() { 12 $data['button_confirm'] = $this->language->get('button_confirm'); 13 14 $data['redirect'] = $this->url->link('extension/payment/wechat_pay/qrcode'); 15 16 return $this->load->view('extension/payment/wechat_pay', $data); 17 } 18 19 public function qrcode() { 20 $this->load->language('extension/payment/wechat_pay'); 21 22 $this->document->setTitle($this->language->get('heading_title')); 23 $this->document->addScript('catalog/view/javascript/qrcode.js'); 24 25 $data['breadcrumbs'] = array(); 26 27 $data['breadcrumbs'][] = array( 28 'text' => $this->language->get('text_home'), 29 'href' => $this->url->link('common/home') 30 ); 31 32 $data['breadcrumbs'][] = array( 33 'text' => $this->language->get('text_checkout'), 34 'href' => $this->url->link('checkout/checkout', '', true) 35 ); 36 37 $data['breadcrumbs'][] = array( 38 'text' => $this->language->get('text_qrcode'), 39 'href' => $this->url->link('extension/payment/wechat_pay/qrcode') 40 ); 41 42 $this->load->model('checkout/order'); 43 44 $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); 45 46 $order_id = trim($order_info['order_id']); 47 $data['order_id'] = $order_id; 48 $subject = trim($this->config->get('config_name')); 49 $currency = $this->config->get('payment_wechat_pay_currency'); 50 $total_amount = trim($this->currency->format($order_info['total'], $currency, '', false)); 51 $notify_url = HTTPS_SERVER . "payment_callback/wechat_pay"; //$this->url->link('wechat_pay/callback'); 52 53 $options = array( 54 'appid' => $this->config->get('payment_wechat_pay_app_id'), 55 'appsecret' => $this->config->get('payment_wechat_pay_app_secret'), 56 'mch_id' => $this->config->get('payment_wechat_pay_mch_id'), 57 'partnerkey' => $this->config->get('payment_wechat_pay_api_secret') 58 ); 59 60 \Wechat\Loader::config($options); 61 $pay = new \Wechat\WechatPay(); 62 63 $result = $pay->getPrepayId(NULL, $subject, $order_id, $total_amount * 100, $notify_url, $trade_type = "NATIVE", NULL, $currency); 64 65 $data['error'] = ''; 66 $data['code_url'] = ''; 67 if($result === FALSE){ 68 $data['error_warning'] = $pay->errMsg; 69 } else { 70 $data['code_url'] = $result; 71 } 72 73 $data['action_success'] = $this->url->link('checkout/success'); 74 75 $data['column_left'] = $this->load->controller('common/column_left'); 76 $data['column_right'] = $this->load->controller('common/column_right'); 77 $data['content_top'] = $this->load->controller('common/content_top'); 78 $data['content_bottom'] = $this->load->controller('common/content_bottom'); 79 $data['footer'] = $this->load->controller('common/footer'); 80 $data['header'] = $this->load->controller('common/header'); 81 82 $this->response->setOutput($this->load->view('extension/payment/wechat_pay_qrcode', $data)); 83 } 84 85 public function isOrderPaid() { 86 $json = array(); 87 88 $json['result'] = false; 89 90 if (isset($this->request->get['order_id'])) { 91 $order_id = $this->request->get['order_id']; 92 93 $this->load->model('checkout/order'); 94 $order_info = $this->model_checkout_order->getOrder($order_id); 95 96 if ($order_info['order_status_id'] == $this->config->get('payment_wechat_pay_completed_status_id')) { 97 $json['result'] = true; 98 } 99 } 100 101 $this->response->addHeader('Content-Type: application/json'); 102 $this->response->setOutput(json_encode($json)); 103 } 104 105 public function callback() { 106 $options = array( 107 'appid' => $this->config->get('payment_wechat_pay_app_id'), 108 'appsecret' => $this->config->get('payment_wechat_pay_app_secret'), 109 'mch_id' => $this->config->get('payment_wechat_pay_mch_id'), 110 'partnerkey' => $this->config->get('payment_wechat_pay_api_secret') 111 ); 112 113 \Wechat\Loader::config($options); 114 $pay = new \Wechat\WechatPay(); 115 $notifyInfo = $pay->getNotify(); 116 117 if ($notifyInfo === FALSE) { 118 $this->log->write('Wechat Pay Error: ' . $pay->errMsg); 119 } else { 120 if ($notifyInfo['result_code'] == 'SUCCESS' && $notifyInfo['return_code'] == 'SUCCESS') { 121 $order_id = $notifyInfo['out_trade_no']; 122 $this->load->model('checkout/order'); 123 $order_info = $this->model_checkout_order->getOrder($order_id); 124 if ($order_info) { 125 $order_status_id = $order_info["order_status_id"]; 126 if (!$order_status_id) { 127 $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_wechat_pay_completed_status_id')); 128 } 129 } 130 return xml(['return_code' => 'SUCCESS', 'return_msg' => 'DEAL WITH SUCCESS']); 131 } 132 } 133 } 134 }