Commit e6a862b6 authored by liuyuzhen's avatar liuyuzhen

微信支付服务商相关

parent 353835a8
......@@ -13,9 +13,16 @@ class PayConst {
const wxPayMchId = '1507388351';
const wxPaySecret = 'appSecret';
const wxPayKey = 'kt4gh9FzzlaoPBY074iuF4ZbNmMKc3mS';
const wxSslcertPath = '/application/library/Payment/cert/wx/apiclient_cert.pem';
const wxSslkeyPath = '/application/library/Payment/cert/wx/apiclient_key.pem';
//服务商appId和服务商payKey
const wxSPayAppId = 'wxd89203f7621015b7';
const wxSPayMchId = '1517411161';
const wxSPayKey = 'z6o0aQ4Gbceaymj6BKm9PYPjHaUJGokJ';
const wxServiceSslcertPath = '/application/library/Payment/cert/wxservice/1517411161_20181102_cert.pem';
const wxServiceSslkeyPath = '/application/library/Payment/cert/wxservice/1517411161_20181102.pem';
const wxPayUrl = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
const qPayAppId = 'qPayAppId';
......
......@@ -29,12 +29,14 @@ class Pay {
$orderInfo = $this->getOrder();
if($data['channel'] == \Our\NameConst::wxAppChannel){
$wxpay = WxPay::getInstance();
$orderInfo['subMchId'] = '1517943841';
$return = $wxpay->doPay($orderInfo);
}else if($data['channel'] == \Our\NameConst::aliApiChannel){
$alipay= Alipay::getInstance();
$return = $alipay->doPay($orderInfo);
}else if($data['channel'] == \Our\NameConst::wxLiteChannel){
$sess = \Yaf\Session::getInstance();
$orderInfo['subMchId'] = '1517943841';
$authInfo = $sess->get('wxAuthInfo');
$orderInfo['openid'] = $authInfo['openid'];
$wxLitePay = WxLitePay::getInstance();
......
......@@ -18,6 +18,9 @@ class TencentPay {
protected $result ='';
protected $key = '';
protected $mch_id ='';
protected $s_appid ='';
protected $s_key = '';
protected $s_mch_id ='';
protected $prepay_id ='';
protected $tradeType = '';
public $data;//接收到的数据,类型为关联数组
......@@ -51,6 +54,35 @@ class TencentPay {
$this->setPrepayId($prepay_id);
}
public function setServiceRequestParams($orderInfo){
$this->key = $this->s_key;
$pay_sn = $orderInfo['paySn'];
$total_fee = $orderInfo['orderAmount'];
$this->parameters['appid']=$this->s_appid;
$this->parameters['mch_id']=$this->s_mch_id;
$this->parameters['sub_appid']=$this->s_appid;
$this->parameters['sub_mch_id']=$orderInfo['subMchId'];
$this->parameters['nonce_str']=\Our\CommonExtension::createNoncestr(32);
$this->parameters['body']='订单号:'.implode(',',$orderInfo['orderSns']);
$this->parameters['attach']='r|'.$pay_sn;
$this->parameters['out_trade_no']=$pay_sn;
$this->parameters['fee_type']= \Our\NameConst::currentCNY;
if(APP_ENV == 'develop'||APP_ENV == 'test'||APP_ENV == 'pre'){
$this->parameters['total_fee'] = 1;
}else{
$this->parameters['total_fee'] = $total_fee;
}
if(isset($orderInfo['openid'])&&$orderInfo['openid']){
$this->parameters['openid'] = $orderInfo['openid'];
}
$this->parameters['spbill_create_ip']=\Our\Common::getClientIp();
$this->parameters['notify_url']=$this->notify_url;
$this->parameters['trade_type']= $this->tradeType;
//$this->parameters['openid']=$_SESSION['openid'];
//print_r($this->parameters);exit;
$prepay_id = $this->getPrepayId();
$this->setPrepayId($prepay_id);
}
/**
* 作用:设置prepay_id
......@@ -90,6 +122,7 @@ class TencentPay {
{
$xml = $this->createXml();
$this->response = $this->postXmlCurl($xml,$this->pay_url,$this->curl_timeout);
print_r($this->response);
return $this->response;
}
......
......@@ -18,11 +18,19 @@ class WxLitePay extends \Payment\TencentPay{
$this->sslkey_path = \Our\PayConst::wxSslkeyPath;
$this->pay_url = \Our\PayConst::wxPayUrl;
$this->tradeType = \Our\PayConst::wxLiteTradeType;
$this->s_mch_id = \Our\PayConst::wxSPayMchId;
$this->s_key = \Our\PayConst::wxSPayKey;
$this->s_appid = \Our\PayConst::wxSPayAppId;
}
public function doPay($orderInfo){
if(isset($orderInfo['subMchId'])){
$this->setServiceRequestParams($orderInfo);
}else{
$this->setRequestParams($orderInfo);
}
//$this->setRequestParams($orderInfo);
$wxAppParameters = $this->getParameters();
$returnData = array(
'credential'=>array(\Our\NameConst::wxLiteChannel=>$wxAppParameters),
......
......@@ -22,11 +22,18 @@ class WxPay extends \Payment\TencentPay
$this->sslkey_path = \Our\PayConst::wxSslkeyPath;
$this->pay_url = \Our\PayConst::wxPayUrl;
$this->tradeType = \Our\PayConst::wxAppTradeType;
$this->s_mch_id = \Our\PayConst::wxSPayMchId;
$this->s_key = \Our\PayConst::wxSPayKey;
$this->s_appid = \Our\PayConst::wxSPayAppId;
}
public function doPay($orderInfo)
{
if(isset($orderInfo['subMchId'])){
$this->setServiceRequestParams($orderInfo);
}else{
$this->setRequestParams($orderInfo);
}
$wxAppParameters = $this->getParameters();
$returnData = array(
'credential' => array(\Our\NameConst::wxAppChannel => $wxAppParameters),
......@@ -64,7 +71,47 @@ class WxPay extends \Payment\TencentPay
return $str;
}
public function refund($param)
public function refund($param){
if($param['subMchId']){
$this->serviceRefund($param);
}else{
$this->commonRefund($param);
}
}
public function serviceRefund($param){
$this->sslcert_path = \Our\PayConst::wxServiceSslcertPath;
$this->sslkey_path = \Our\PayConst::wxServiceSslkeyPath;
$total_fee = intval($param['totalFee']);
$refund_fee = intval($param['refundFee']);
if(APP_ENV == 'develop'||APP_ENV == 'test'||APP_ENV == 'pre' || APP_ENV=='ccwdevelop'){
$this->parameters['total_fee'] = 1;
$this->parameters['refund_fee'] = 1;
} else {
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] = $refund_fee;
}
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] =$refund_fee;
$this->parameters['out_refund_no'] = $param['refundOrderNo'];
$this->parameters['out_trade_no'] = $param['outTradeNo'];
$this->parameters['op_user_id'] = $this->mch_id;
$this->parameters['nonce_str'] = $this->createNoncestr(32);
$this->parameters['appid'] = \Our\PayConst::wxSPayAppId;
$this->parameters['mch_id'] = \Our\PayConst::wxSPayMchId;
$this->parameters['sub_appid'] = \Our\PayConst::wxSPayAppId;
$this->parameters['sub_mch_id '] = $param['subMchId'];
$xml = $this->createXml();
$response = $this->postXmlSSLCurl($xml, $this->refundUrl, 6);
$values = $this->xmlToArray($response);
if ($values['return_code'] != 'SUCCESS') {
return $values;
}
$this->checkSign($values);
return $values;
}
public function commonRefund($param)
{
$total_fee = intval($param['totalFee']);
$refund_fee = intval($param['refundFee']);
......@@ -92,8 +139,20 @@ class WxPay extends \Payment\TencentPay
$this->checkSign($values);
return $values;
}
public function refundWxProgram($param)
{
public function refundWxProgram($param){
if($param['subMchId']){
$this->refundServiceWxProgram($param);
}else{
$this->refundCommonWxProgram($param);
}
}
public function refundServiceWxProgram($param){
$this->sslcert_path = \Our\PayConst::wxServiceSslcertPath;
$this->sslkey_path = \Our\PayConst::wxServiceSslkeyPath;
$total_fee = intval($param['totalFee']);
$refund_fee = intval($param['refundFee']);
if(APP_ENV == 'develop'||APP_ENV == 'test'||APP_ENV == 'pre' || APP_ENV=='ccwdevelop'){
......@@ -103,12 +162,16 @@ class WxPay extends \Payment\TencentPay
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] = $refund_fee;
}
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] =$refund_fee;
$this->parameters['out_refund_no'] = $param['refundOrderNo'];
$this->parameters['out_trade_no'] = $param['outTradeNo'];
$this->parameters['op_user_id'] = $this->mch_id;
$this->parameters['nonce_str'] = $this->createNoncestr(32);
$this->parameters['appid'] = \Our\PayConst::wxLiteAppId;
$this->parameters['mch_id'] = \Our\PayConst::wxPayMchId;
$this->parameters['mch_id'] = \Our\PayConst::wxSPayMchId;
$this->parameters['sub_appid'] = \Our\PayConst::wxSPayAppId;
$this->parameters['sub_mch_id '] = $param['subMchId'];
$xml = $this->createXml();
$response = $this->postXmlSSLCurl($xml, $this->refundUrl, 6);
$values = $this->xmlToArray($response);
......@@ -119,6 +182,31 @@ class WxPay extends \Payment\TencentPay
return $values;
}
public function refundCommonWxProgram($param){
$total_fee = intval($param['totalFee']);
$refund_fee = intval($param['refundFee']);
if(APP_ENV == 'develop'||APP_ENV == 'test'||APP_ENV == 'pre' || APP_ENV=='ccwdevelop'){
$this->parameters['total_fee'] = 1;
$this->parameters['refund_fee'] = 1;
} else {
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] = $refund_fee;
}
$this->parameters['out_refund_no'] = $param['refundOrderNo'];
$this->parameters['out_trade_no'] = $param['outTradeNo'];
$this->parameters['op_user_id'] = $this->mch_id;
$this->parameters['nonce_str'] = $this->createNoncestr(32);
$this->parameters['appid'] = \Our\PayConst::wxLiteAppId;
$this->parameters['mch_id'] = \Our\PayConst::wxPayMchId;
$xml = $this->createXml();
$response = $this->postXmlSSLCurl($xml, $this->refundUrl, 6);
$values = $this->xmlToArray($response);
if ($values['return_code'] != 'SUCCESS') {
return $values;
}
$this->checkSign($values);
return $values;
}
/**
* 类实例
*
......
-----BEGIN CERTIFICATE-----
MIID/jCCAuagAwIBAgIUP4Etbcyczm2HU2J+c0XtQfxm7zUwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMTgxMTAyMDIzMzEyWhcNMjMxMTAxMDIzMzEyWjCBjzETMBEGA1UEAwwK
MTUxNzQxMTE2MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMScwJQYDVQQL
DB7npo/lt57ljYPnm5/nu4/otLjmnInpmZDlhazlj7gxCzAJBgNVBAYMAkNOMRIw
EAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqoGRdVvY9FjWy0rtniEr7aGmPfTFwc8QyvkI
MpUAthEKjgAmyScgSQolsQPUhdjOCGShk0U0yrJGkdNGGi8utt8LI2jQWqRiaG3r
11u9m4TZGgIrGs+F9CCk6kT7dHsK7HNehzTKqSZqGcDqu5/VWosT3s1MFIGeWSbk
mK7OnoBUgwBWVxtYLJu+JN45T7IVTmcS3/jNhj3ZN+2iCqGei5YFgEMxU9gm4KGv
tWSvgf3agqlFmcuhrnEN76Z0FOunLyvrm6m9F3PfXoVQOk0DD1gM1qlIUCNDmfng
HNl3JAGbk3WL2yLmjY/IsVFonIKOWowRd3ln/msvSxkMwJtCBwIDAQABo4GBMH8w
CQYDVR0TBAIwADALBgNVHQ8EBAMCBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDov
L2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUw
REJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IB
AQADalCkWzbaIZ1o8m6qkMwLavW9YfDKm2SlT5vc1nQLHTp6g5iFTOYqMapJfIlx
jGdAuaugl8TW6sPzUzCA79jySjq/BG2AM8MyErYlQV0wDl5d4zSs7NcJS3+I3KEQ
T/p/ganxNi3325hPo6FyYUGvYIzEgvBMZ1Mu3oYoURwo/gQD7zF+qEGaZO8EE/2V
2RsBnQHLkVb9cl4Eoc0RrSrWWVBfOb6ospuEEgqTw3WzEXJ9hN7RBLQVRs1ebTLu
gY0tRop5v4btMO/WD7Cnh2cku/4snPoepMeZ1abDX7QPIhtC2g2VvNcv5QReSQ8g
dSgeI4kZZrc/UUenmZRZJDc1
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCqgZF1W9j0WNbL
Su2eISvtoaY99MXBzxDK+QgylQC2EQqOACbJJyBJCiWxA9SF2M4IZKGTRTTKskaR
00YaLy623wsjaNBapGJobevXW72bhNkaAisaz4X0IKTqRPt0ewrsc16HNMqpJmoZ
wOq7n9VaixPezUwUgZ5ZJuSYrs6egFSDAFZXG1gsm74k3jlPshVOZxLf+M2GPdk3
7aIKoZ6LlgWAQzFT2Cbgoa+1ZK+B/dqCqUWZy6GucQ3vpnQU66cvK+ubqb0Xc99e
hVA6TQMPWAzWqUhQI0OZ+eAc2XckAZuTdYvbIuaNj8ixUWicgo5ajBF3eWf+ay9L
GQzAm0IHAgMBAAECggEBAJKUww0GgfRGb5njd3XrBI3M21MGHACq17/26YI6sJrU
+aLsJGvntAy2qYKNTWYn5bA3euRVqbXcH2j8HZcjGuDhzPyK/hv+mA84+HhzCQUq
501Bsfbhk0I10jEITrhrkw+Fey13SAa03J/5RpM4LD4jtFhlW9OBPzVbh0hvd3ew
aiQvS74y+9XRyMi7AE4mZ0iVXLYaLOV15taxr31Z6SW6EeZu7ShU/Xn7hpMOcfEf
O3NDFyTzJUReO++zYuqY/gh9si6udgtKRb0low9eThz4S5T7O474pKKE6shjFe/h
r0PGrGdWL6A60VqGg7w3PtwpvXzopj7jI9ek/HDrSmECgYEA1ez0cEnigagsCHuw
twbG3xvFgzj8V1tidjySPIF4f1Mpj+vXkBJUH/SM47DXGb8e7ZsMtdkC4Lw2GhgM
iGBg4mMTzt3civSsHbn1vVBB/ndalccHx33408R4SOWkSv0R1fBqnEP173wfmJSA
Ge94y2E+63MtFdy5YjTl8MwtGVECgYEAzAp299e/bIoge1uGoCL7+L9+axmk2Uu1
k5/pVXI3pWY4ID7jtIZbidiiSYALFWuNdS3PadgjRy4g3rR1Vgr99+c8PJUWJtYv
SASguu0zBN6gI2ZsDXC5UlzI+xqzZGGbfA7EN0uqLXyh8tRN6OD1s1iSe7tcbqsl
ZUbCdJJ7T9cCgYEAnl2gR1ArAlkA3/bRR20Y5Cmm+hHBnNnl9im5CFnAXmGuLwEk
v18SL+XWNui/FCxMNRHHQwe3/a7XTlHnVT4j+vPlwgq0LZoboJX9uXwknsC0qpSA
ycoT3pFfineWPH1EKuCjy7Lz6ao1qbqlao3BGq6O6baF9d1Ez9LhNnWwHUECgYEA
m5v7gSbkEWYCQbHaqTQlEF8SjaGADExmDVDuhcDW2Whss4Li6+Fv3F//3KgvS8W7
mzs1rNYuiXGPlejwd49ogvCyCs30l+fPJVCKOCUAPN2AKZ9KFrH6U+r5SC/j0lFy
YBlu4XDuN0SOyf/J7ynpmD6bcIvCgZA6s9NUJ80zB/8CgYAR+YDo47AEBL/7rRR7
a7L+7h9kMSyggo31ODNt9sw5IuxMIRWaAi98jF4z2uAxjo2PSqhbiWQZ/xOd5hw2
nyXxdlFCsZYZQi8SgA8XuV3Bopk2IZzq6vHIsh+JtMZGi0wE2iCCjjVTC/Zc3NiE
MUgDT0wW7zFc7d6JGuHKzfZTDA==
-----END PRIVATE KEY-----
......@@ -341,7 +341,7 @@ class RefundReturnModel extends \DAO\AbstractModel {
}
}else if(intval($orderInfo['paymentType']) == ApiConst::wxProgram){
$wxpay = \Payment\WxPay::getInstance();
$refund_return = $wxpay->refund($param);
$refund_return = $wxpay->refundWxProgram($param);
$this->errorMessage= "微信小程序返回:".json_encode($refund_return);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage=date('Y-m-d').'微信退款操作执行失败!'.$orderInfo['orderId']."\r\n";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment