Service.php
3.61 KB
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
<?php
namespace WebPlugin\Pay\Wechatqrcode;
use WebPlugin\Pay\PayAbstract;
use WebPlugin\Pay\Reqparams;
use WebPlugin\Pay\Rspparams;
use WebPlugin\Pay\Signature;
use WebPlugin\Pay\weixin\lib\WxPayApi;
use WebPlugin\Pay\weixin\lib\WxPayOrderQuery;
class Service extends PayAbstract
{
private $config;
private $orderCode;
private $paymentCode;
private $appKey;
private $privateKey;
private $payCurl;
public function __construct(array $paymentParams) {
$this->logProjectPrefix = 'wechatpay';
$this->config = new Config();
$environParam = 'pay_'.APPLICATION_ENV.'_url';
$this->payCurl = $this->config->$environParam;
$this->appKey = $this->config->app_key;
$this->privateKey = $this->config->private_key;
$this->paymentCode = $paymentParams['id'];
}
public function getPayRequestPars(Reqparams $params) {
$this->orderCode = $params->orderCode;
$result = array(
'pay_url' => $this->config->payment_url,
'pars' => 'order_code=' . $this->orderCode . '&payment_code=' . $this->paymentCode,
'reqType' => 'get'
);
return $result;
}
/**
* 微信支付页
* @param array $orderInfo
* @return string
* @internal param array $orderCode
*/
public function pay(array $orderInfo) {
//生成签名
$this->orderCode = $orderInfo['order_code'];
$payParams = array(
'order_code' => $this->orderCode,
'app_key' => $this->appKey,
'payment_code' => $this->paymentCode,
'private_key' => $this->privateKey
);
$_params = Signature::packageSort($payParams);
$client_secret = Signature::makeSign($_params);
$parameter = array(
'order_code' => $this->orderCode,
'app_key' => $this->appKey,
//这里payment.yoho_pay表与payment.q_pay表数据需一致
'payment_code' => $this->paymentCode,
'client_secret' => $client_secret,
'client' => 'web'
);
$pars = '';
foreach ($parameter as $p_key => $p_val) {
$pars.=$p_key . '=' . urlencode($p_val) . '&';
}
$payUrlInfo = array(
'pay_url' => $this->payCurl,
'pars' => trim($pars, '&')
);
$payUrl = $payUrlInfo['pay_url'] . '?' . $payUrlInfo['pars'];
return array('pay_url' => $payUrl);
}
public function parseResponse(array $data) {
/* 返回示例
* http://www.yohobuy.com/pay/notice/wechatqrcodereturn?ordercode=93465435
*/
// 组装微信支付的订单号
$tradeNo = 'YOHOBuy_' . $data['orderCode'];
$input = new WxPayOrderQuery();
$input->SetOut_trade_no($tradeNo);
$result = WxPayApi::orderQuery($input);
$rsp = new Rspparams();
// 支付成功
if(isset($result['trade_state']) && $result['trade_state'] === 'SUCCESS'){
$rsp->payResult = 200;
$rsp->bankName = "WX";
$rsp->orderCode = $data['orderCode'];
$rsp->payTime = $result["time_end"];
$rsp->totalFee = $result["total_fee"] / 100;
$rsp->resultMsg = '支付成功';
//添加支付订单号和交易号
$rsp->payOrderCode = $data["orderCode"];
$rsp->tradeNo = $result["out_trade_no"];
$rsp->bankBillNo = $result['bank_type'];
}else{
$rsp->payResult = -1;
}
return $rsp;
}
}