1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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']);
}
}
}
}
|