shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }