wx pay debug
parent
0e087acaa0
commit
4c8005a9ab
|
|
@ -120,7 +120,8 @@ return array(
|
||||||
'common_platform_type' => array(
|
'common_platform_type' => array(
|
||||||
'pc' => array('value' => 'pc', 'name' => 'PC网站'),
|
'pc' => array('value' => 'pc', 'name' => 'PC网站'),
|
||||||
'h5' => array('value' => 'h5', 'name' => 'H5手机网站'),
|
'h5' => array('value' => 'h5', 'name' => 'H5手机网站'),
|
||||||
'app' => array('value' => 'app', 'name' => 'APP'),
|
'ios' => array('value' => 'ios', 'name' => '苹果APP'),
|
||||||
|
'android' => array('value' => 'android', 'name' => '安卓APP'),
|
||||||
'alipay' => array('value' => 'alipay', 'name' => '支付宝小程序'),
|
'alipay' => array('value' => 'alipay', 'name' => '支付宝小程序'),
|
||||||
'weixin' => array('value' => 'weixin', 'name' => '微信小程序'),
|
'weixin' => array('value' => 'weixin', 'name' => '微信小程序'),
|
||||||
'baidu' => array('value' => 'baidu', 'name' => '百度小程序'),
|
'baidu' => array('value' => 'baidu', 'name' => '百度小程序'),
|
||||||
|
|
|
||||||
|
|
@ -850,7 +850,8 @@ class OrderAftersaleService
|
||||||
$pay_params = [
|
$pay_params = [
|
||||||
'order_no' => $order['order_no'],
|
'order_no' => $order['order_no'],
|
||||||
'trade_no' => $pay_log['trade_no'],
|
'trade_no' => $pay_log['trade_no'],
|
||||||
'refund_amount' => $aftersale['price'],
|
'pay_price' => $order['pay_price'],
|
||||||
|
'refund_price' => $aftersale['price'],
|
||||||
'refund_reason' => $order['order_no'].'订单退款'.$aftersale['price'].'元',
|
'refund_reason' => $order['order_no'].'订单退款'.$aftersale['price'].'元',
|
||||||
];
|
];
|
||||||
$ret = (new $pay_name($payment[0]['config']))->Refund($pay_params);
|
$ret = (new $pay_name($payment[0]['config']))->Refund($pay_params);
|
||||||
|
|
|
||||||
|
|
@ -298,7 +298,7 @@ class Alipay
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'checked_type' => 'empty',
|
'checked_type' => 'empty',
|
||||||
'key_name' => 'refund_amount',
|
'key_name' => 'refund_price',
|
||||||
'error_msg' => '退款金额不能为空',
|
'error_msg' => '退款金额不能为空',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
@ -309,7 +309,7 @@ class Alipay
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退款原因
|
// 退款原因
|
||||||
$refund_reason = empty($params['refund_reason']) ? $params['order_no'].'订单退款'.$params['refund_amount'].'元' : $params['refund_reason'];
|
$refund_reason = empty($params['refund_reason']) ? $params['order_no'].'订单退款'.$params['refund_price'].'元' : $params['refund_reason'];
|
||||||
|
|
||||||
// 退款参数
|
// 退款参数
|
||||||
$parameter = array(
|
$parameter = array(
|
||||||
|
|
@ -324,7 +324,7 @@ class Alipay
|
||||||
$biz_content = array(
|
$biz_content = array(
|
||||||
'out_trade_no' => $params['order_no'],
|
'out_trade_no' => $params['order_no'],
|
||||||
'trade_no' => $params['trade_no'],
|
'trade_no' => $params['trade_no'],
|
||||||
'refund_amount' => $params['refund_amount'],
|
'refund_amount' => $params['refund_price'],
|
||||||
'refund_reason' => $refund_reason,
|
'refund_reason' => $refund_reason,
|
||||||
);
|
);
|
||||||
$parameter['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE);
|
$parameter['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE);
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,94 @@ class AlipayMini
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退款处理
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2019-05-28
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
public function Refund($params = [])
|
||||||
|
{
|
||||||
|
// 参数
|
||||||
|
$p = [
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'order_no',
|
||||||
|
'error_msg' => '订单号不能为空',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'trade_no',
|
||||||
|
'error_msg' => '交易平台订单号不能为空',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'refund_price',
|
||||||
|
'error_msg' => '退款金额不能为空',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$ret = ParamsChecked($params, $p);
|
||||||
|
if($ret !== true)
|
||||||
|
{
|
||||||
|
return DataReturn($ret, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 退款原因
|
||||||
|
$refund_reason = empty($params['refund_reason']) ? $params['order_no'].'订单退款'.$params['refund_price'].'元' : $params['refund_reason'];
|
||||||
|
|
||||||
|
// 退款参数
|
||||||
|
$parameter = array(
|
||||||
|
'app_id' => $this->config['appid'],
|
||||||
|
'method' => 'alipay.trade.refund',
|
||||||
|
'format' => 'JSON',
|
||||||
|
'charset' => 'utf-8',
|
||||||
|
'sign_type' => 'RSA2',
|
||||||
|
'timestamp' => date('Y-m-d H:i:s'),
|
||||||
|
'version' => '1.0',
|
||||||
|
);
|
||||||
|
$biz_content = array(
|
||||||
|
'out_trade_no' => $params['order_no'],
|
||||||
|
'trade_no' => $params['trade_no'],
|
||||||
|
'refund_amount' => $params['refund_price'],
|
||||||
|
'refund_reason' => $refund_reason,
|
||||||
|
);
|
||||||
|
$parameter['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE);
|
||||||
|
|
||||||
|
// 生成签名参数+签名
|
||||||
|
$params = $this->GetParamSign($parameter);
|
||||||
|
$parameter['sign'] = $this->MyRsaSign($params['value']);
|
||||||
|
|
||||||
|
// 执行请求
|
||||||
|
$result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $parameter);
|
||||||
|
$key = str_replace('.', '_', $parameter['method']).'_response';
|
||||||
|
|
||||||
|
// 验证签名
|
||||||
|
if(!$this->SyncRsaVerify($result, $key))
|
||||||
|
{
|
||||||
|
return DataReturn('签名验证错误', -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 状态
|
||||||
|
if(isset($result[$key]['code']) && $result[$key]['code'] == 10000)
|
||||||
|
{
|
||||||
|
// 统一返回格式
|
||||||
|
$data = [
|
||||||
|
'out_trade_no' => isset($result[$key]['out_trade_no']) ? $result[$key]['out_trade_no'] : '',
|
||||||
|
'trade_no' => isset($result[$key]['trade_no']) ? $result[$key]['trade_no'] : '',
|
||||||
|
'buyer_user' => isset($result[$key]['buyer_user_id']) ? $result[$key]['buyer_user_id'] : '',
|
||||||
|
'refund_price' => isset($result[$key]['refund_fee']) ? $result[$key]['refund_fee'] : 0.00,
|
||||||
|
'return_params' => $result[$key],
|
||||||
|
];
|
||||||
|
return DataReturn('退款成功', 0, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 直接返回支付信息
|
||||||
|
return DataReturn($result[$key]['sub_msg'].'['.$result[$key]['sub_code'].']', -1000);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [GetParamSign 生成参数和签名]
|
* [GetParamSign 生成参数和签名]
|
||||||
* @param [array] $data [待生成的参数]
|
* @param [array] $data [待生成的参数]
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,24 @@ class Weixin
|
||||||
'is_required' => 0,
|
'is_required' => 0,
|
||||||
'message' => '请填写密钥',
|
'message' => '请填写密钥',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'element' => 'textarea',
|
||||||
|
'name' => 'apiclient_cert',
|
||||||
|
'placeholder' => '证书(apiclient_cert.pem)',
|
||||||
|
'title' => '证书(apiclient_cert.pem)',
|
||||||
|
'is_required' => 0,
|
||||||
|
'rows' => 6,
|
||||||
|
'message' => '请填写证书(apiclient_cert.pem)',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'element' => 'textarea',
|
||||||
|
'name' => 'apiclient_key',
|
||||||
|
'placeholder' => '证书密钥(apiclient_key.pem)',
|
||||||
|
'title' => '证书密钥(apiclient_key.pem)',
|
||||||
|
'is_required' => 0,
|
||||||
|
'rows' => 6,
|
||||||
|
'message' => '请填写证书密钥(apiclient_key.pem)',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'element' => 'select',
|
'element' => 'select',
|
||||||
'title' => '异步通知协议',
|
'title' => '异步通知协议',
|
||||||
|
|
@ -107,7 +125,7 @@ class Weixin
|
||||||
'name' => 'agreement',
|
'name' => 'agreement',
|
||||||
'is_multiple' => 0,
|
'is_multiple' => 0,
|
||||||
'element_data' => [
|
'element_data' => [
|
||||||
['value'=>1, 'name'=>'默认当前http协议'],
|
['value'=>1, 'name'=>'默认当前协议'],
|
||||||
['value'=>2, 'name'=>'强制https转http协议'],
|
['value'=>2, 'name'=>'强制https转http协议'],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
@ -426,6 +444,92 @@ class Weixin
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退款处理
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2019-05-28
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
public function Refund($params = [])
|
||||||
|
{
|
||||||
|
// 参数
|
||||||
|
$p = [
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'order_no',
|
||||||
|
'error_msg' => '订单号不能为空',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'trade_no',
|
||||||
|
'error_msg' => '交易平台订单号不能为空',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'pay_price',
|
||||||
|
'error_msg' => '支付金额不能为空',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'checked_type' => 'empty',
|
||||||
|
'key_name' => 'refund_price',
|
||||||
|
'error_msg' => '退款金额不能为空',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$ret = ParamsChecked($params, $p);
|
||||||
|
if($ret !== true)
|
||||||
|
{
|
||||||
|
return DataReturn($ret, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 退款原因
|
||||||
|
$refund_reason = empty($params['refund_reason']) ? $params['order_no'].'订单退款'.$params['refund_price'].'元' : $params['refund_reason'];
|
||||||
|
|
||||||
|
// appid
|
||||||
|
$appid = (APPLICATION == 'app') ? $this->config['mini_appid'] : $this->config['appid'];
|
||||||
|
|
||||||
|
// 请求参数
|
||||||
|
$data = [
|
||||||
|
'appid' => $appid,
|
||||||
|
'mch_id' => $this->config['mch_id'],
|
||||||
|
'nonce_str' => md5(time().rand().$params['order_no']),
|
||||||
|
'sign_type' => 'MD5',
|
||||||
|
'transaction_id' => $params['trade_no'],
|
||||||
|
'out_trade_no' => $params['order_no'],
|
||||||
|
'out_refund_no' => $params['order_no'].GetNumberCode(6),
|
||||||
|
'total_fee' => intval($params['pay_price']*100),
|
||||||
|
'refund_fee' => intval($params['refund_price']*100),
|
||||||
|
'refund_desc' => $refund_reason,
|
||||||
|
|
||||||
|
];
|
||||||
|
$data['sign'] = $this->GetSign($data);
|
||||||
|
|
||||||
|
// xml
|
||||||
|
$xml = $this->ArrayToXml($data);
|
||||||
|
// echo $xml;die;
|
||||||
|
$result = $this->XmlToArray($this->HttpRequest('https://api.mch.weixin.qq.com/secapi/pay/refund', $xml, true));
|
||||||
|
if(!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['prepay_id']))
|
||||||
|
{
|
||||||
|
// 统一返回格式
|
||||||
|
$data = [
|
||||||
|
'out_trade_no' => isset($result['out_trade_no']) ? $result['out_trade_no'] : '',
|
||||||
|
'trade_no' => isset($result['transaction_id']) ? $result['transaction_id'] : '',
|
||||||
|
'buyer_user' => isset($result['refund_id']) ? $result['refund_id'] : '',
|
||||||
|
'refund_price' => isset($result['refund_fee']) ? $result['refund_fee'] : 0.00,
|
||||||
|
'return_params' => $result,
|
||||||
|
];
|
||||||
|
return DataReturn('退款成功', 0, $data);
|
||||||
|
}
|
||||||
|
$msg = empty($result['return_msg']) ? '退款异常' : $result['return_msg'];
|
||||||
|
if(!empty($result['err_code_des']))
|
||||||
|
{
|
||||||
|
$msg .= '-'.$result['err_code_des'];
|
||||||
|
}
|
||||||
|
return DataReturn($msg, -1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 签名生成
|
* 签名生成
|
||||||
* @author Devil
|
* @author Devil
|
||||||
|
|
@ -533,13 +637,20 @@ class Weixin
|
||||||
|
|
||||||
if($use_cert == true)
|
if($use_cert == true)
|
||||||
{
|
{
|
||||||
// 退款 取消使用
|
$apiclient_cert = "-----BEGIN CERTIFICATE-----\n";
|
||||||
|
$apiclient_cert .= wordwrap($this->config['apiclient_cert'], 64, "\n", true);
|
||||||
|
$apiclient_cert .= "\n-----END CERTIFICATE-----";
|
||||||
|
|
||||||
|
$apiclient_key = "-----BEGIN PRIVATE KEY-----\n";
|
||||||
|
$apiclient_key .= wordwrap($this->config['apiclient_key'], 64, "\n", true);
|
||||||
|
$apiclient_key .= "\n-----END PRIVATE KEY-----";
|
||||||
|
|
||||||
//设置证书
|
//设置证书
|
||||||
//使用证书:cert 与 key 分别属于两个.pem文件
|
//使用证书:cert 与 key 分别属于两个.pem文件
|
||||||
// $options[CURLOPT_SSLCERTTYPE] = 'PEM';
|
$options[CURLOPT_SSLCERTTYPE] = 'PEM';
|
||||||
// $options[CURLOPT_SSLCERT] = WEB_ROOT.'cert/wechat_app_apiclient_cert.pem';
|
$options[CURLOPT_SSLCERT] = ROOT.'weixin-cert/apiclient_cert.pem';
|
||||||
// $options[CURLOPT_SSLKEYTYPE] = 'PEM';
|
$options[CURLOPT_SSLKEYTYPE] = 'PEM';
|
||||||
// $options[CURLOPT_SSLKEY] = WEB_ROOT.'cert/wechat_app_apiclient_key.pem';
|
$options[CURLOPT_SSLKEY] = ROOT.'weixin-cert/apiclient_key.pem';
|
||||||
}
|
}
|
||||||
|
|
||||||
$ch = curl_init($url);
|
$ch = curl_init($url);
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ App({
|
||||||
return (
|
return (
|
||||||
this.data.request_url +
|
this.data.request_url +
|
||||||
"index.php?s=/" + m + "/" + c + "/" + a +
|
"index.php?s=/" + m + "/" + c + "/" + a +
|
||||||
"&application_client=default&&application=app&application_client_type=alipay&application_user_id=" +
|
"&application=app&application_client_type=alipay&application_user_id=" +
|
||||||
app_client_user_id +
|
app_client_user_id +
|
||||||
"&user_id=" +
|
"&user_id=" +
|
||||||
user_id +
|
user_id +
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,7 @@ App({
|
||||||
return (
|
return (
|
||||||
this.data.request_url +
|
this.data.request_url +
|
||||||
"index.php?s=/" + m + "/" + c + "/" + a +
|
"index.php?s=/" + m + "/" + c + "/" + a +
|
||||||
"&application_client=default&&application=app&application_client_type=weixin&application_user_id=" +
|
"&application=app&application_client_type=weixin&application_user_id=" +
|
||||||
app_client_user_id +
|
app_client_user_id +
|
||||||
"&user_id=" +
|
"&user_id=" +
|
||||||
user_id +
|
user_id +
|
||||||
|
|
|
||||||
|
|
@ -48,13 +48,10 @@ define('ROOT', str_replace('public'.DS, '', ROOT_PATH));
|
||||||
// 定义应用目录
|
// 定义应用目录
|
||||||
define('APP_PATH', ROOT.'application'.DS);
|
define('APP_PATH', ROOT.'application'.DS);
|
||||||
|
|
||||||
// 请求应用 [web, app] 默认web
|
// 请求应用 [web, app] 默认web(ios|android|小程序 均为app)
|
||||||
define('APPLICATION', empty($_REQUEST['application']) ? 'web' : trim($_REQUEST['application']));
|
define('APPLICATION', empty($_REQUEST['application']) ? 'web' : trim($_REQUEST['application']));
|
||||||
|
|
||||||
// 请求客户端 [default, ...] 默认default
|
// 请求客户端 [pc, h5, ios, android, alipay, weixin, baidu] 默认pc(目前系统为自适应,h5需自行校验)
|
||||||
define('APPLICATION_CLIENT', empty($_REQUEST['application_client']) ? 'default' : trim($_REQUEST['application_client']));
|
|
||||||
|
|
||||||
// 请求客户端 [pc, h5, alipay, weixin, baidu] 默认pc
|
|
||||||
define('APPLICATION_CLIENT_TYPE', empty($_REQUEST['application_client_type']) ? 'pc' : trim($_REQUEST['application_client_type']));
|
define('APPLICATION_CLIENT_TYPE', empty($_REQUEST['application_client_type']) ? 'pc' : trim($_REQUEST['application_client_type']));
|
||||||
|
|
||||||
// 是否ajax
|
// 是否ajax
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,26 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEaDCCA9GgAwIBAgIDas/LMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||||
|
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||||
|
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||||
|
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MTIwMzA5NTIwN1oX
|
||||||
|
DTI2MTIwMTA5NTIwN1owgZgxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||||
|
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||||
|
EwVNTVBheTEtMCsGA1UEAxQk5LiK5rW35YyX5pav572R57uc56eR5oqA5pyJ6ZmQ
|
||||||
|
5YWs5Y+4MREwDwYDVQQEEwgxMDQyMzc1NjCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
||||||
|
ADCCAQoCggEBAMDA5gcWYofO1bp8xEuEMSa7i1WiPi4PuU02FWmDi3wSNIzpyrpP
|
||||||
|
qXmmCu8DRBry4dRf4/62WFgzh0HP9TRnmDsADAr4/Q2i/QQMlFnYyk1N8X7muirP
|
||||||
|
T4aU8BpR4zwBEQMsSybdmuJvyxxZMKR3/McMjXnuyqX6tFbUhCg5XBTZwBR6CNU/
|
||||||
|
Dx28VC6xWvBeWKzjELC59nyb263hjlHjdEy/8xufh3Oux/+nherHSTzQFHPgW9cB
|
||||||
|
25/o90pLq1zSJx66UcdkKMJP8JjOnMvn+nCZmFUDawJKD9SlOLW06DyE/WBDV/Uf
|
||||||
|
qgdm+I1kR5IwRyxGKFwWjP4yDaWqlCEzvpkCAwEAAaOCAUYwggFCMAkGA1UdEwQC
|
||||||
|
MAAwLAYJYIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNhdGUi
|
||||||
|
MB0GA1UdDgQWBBTVt+c3x8Y9CT62eTuErS8U9yFJ2jCBvwYDVR0jBIG3MIG0gBQ+
|
||||||
|
BSb2ImK0FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQBgNV
|
||||||
|
BAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNl
|
||||||
|
bnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3
|
||||||
|
DQEJARYQbW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQEAwIG
|
||||||
|
wDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQAT1LPp
|
||||||
|
RghlBDmKjhFG596cZrYswQznfgahTOwb66nL1WXg6XlBb7sIqflKinAXzQOZJML4
|
||||||
|
iAsHCLq63y+ELJKMeh96tOmgH3pzQt9R6j2aL7kg6aXSSEiPlXiVKStiy2OWARWC
|
||||||
|
lwHc+cBmxiw8K7818NuCc0/WlYzrawPfPQat2g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAwOYHFmKHztW6
|
||||||
|
fMRLhDEmu4tVoj4uD7lNNhVpg4t8EjSM6cq6T6l5pgrvA0Qa8uHUX+P+tlhYM4dB
|
||||||
|
z/U0Z5g7AAwK+P0Nov0EDJRZ2MpNTfF+5roqz0+GlPAaUeM8AREDLEsm3Zrib8sc
|
||||||
|
WTCkd/zHDI157sql+rRW1IQoOVwU2cAUegjVPw8dvFQusVrwXlis4xCwufZ8m9ut
|
||||||
|
4Y5R43RMv/Mbn4dzrsf/p4Xqx0k80BRz4FvXAduf6PdKS6tc0iceulHHZCjCT/CY
|
||||||
|
zpzL5/pwmZhVA2sCSg/UpTi1tOg8hP1gQ1f1H6oHZviNZEeSMEcsRihcFoz+Mg2l
|
||||||
|
qpQhM76ZAgMBAAECggEAQjtGDxNjAdVRXUX30Rb4KJ3yr5cTFJK0klJOIzZfHF/J
|
||||||
|
DM5cqY4r5q/mO+B8a2IftPDKD8CqNIxoInYJhFtAVK2cdby+fwwNMnH8G69BPDTX
|
||||||
|
EUrIl2MqqUzN/805bmnTZaq3nAAzczEEspX2/9x20BKBHm+t1ECD7P4S9xtWh5b+
|
||||||
|
H8IycTZLB5Y6R+0cTptpzkuUvp4kJDfXg9++QyHucEdG3+0jN26qSfog0KPbbeQZ
|
||||||
|
Odmvg8POsMqGcNhsa13OgP9mggQiKtsDQ2hyYbCIjNLK/Rs3JU/dLzJihXazfI12
|
||||||
|
VjIpBbT//Z7LddBnfZ1jfy0OW2jn7s4SObW2ds7ysQKBgQDeXoJvoVE+ZcjTv80t
|
||||||
|
woqXwNYO8Vo9n1fM+8V9kWELgMm1/H2PmEu1pmHUwWwYz4xmNan4NcA0m13MH2tx
|
||||||
|
WItE0GFpISYdCc3jXdU8toGU4YnxACh+GPRy4PHmX3DjA7xx1BX+O4NUKpgt5N9J
|
||||||
|
fxb9k1h4NuXW10qVAKJspTW4HQKBgQDd58GTF+6hjaicEUUZUm+VeejvZaVsVGSn
|
||||||
|
K0HixOU0JfeLWugLswgEB2TU84JFrULfRkjtMOx/5J6MeZFljD/E3VwtVMg2aIrN
|
||||||
|
x5/gRQWyPpfhcl1ZhFy2an3Ql/uMgA/75zU2/EMWV2qAKsQpd3std1Fem370bh1J
|
||||||
|
slJrqi0vrQKBgQDERfsveN3zC3hFnsgFme8mnyjRq6qRNbIT1i6s9MMJmjVwklpp
|
||||||
|
gm1g+mjjl45IH/m2xasu0JLEXFZgM2NselEC/kLcvkub2emGxG3Q1u5tcN2GgTM8
|
||||||
|
id5J/87EHn3Pgp60ghSff/wdMDN+XsPPZYPvcjzmbt5T0VedSSAUcYaG6QKBgQCd
|
||||||
|
i4oKZcZdWpan3zcAyF9Cb6AqPy9YHv6rFPIdDw9vm7kJbkwq6ju5qIo1CoGl+GHu
|
||||||
|
5Ranl8GA9459S14oC4/GtCZaZMQUpNpPSPhAIKDvsLLiM/EEug2c0TRsIUtNsCoo
|
||||||
|
/Tjxxd3Xgc6yGirVCeghGoJhueJDpd4TUZBkshiMrQKBgCJsFeRZGLpqIIF8nQDA
|
||||||
|
8ut6O5e7LRFguqcfp2pMHCSt7inzSJZNQsYq38dPPW2UYBmTO0C8kwNJCjVyYJt3
|
||||||
|
K6Aw9tjix1FU5dqNmC3GDwstz5VmXqmsyISRePgjiMYaIdysDFZYiw6gCRoDKN31
|
||||||
|
OvonqYebbxvzTfQGtUNmCdvW
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
欢迎使用微信支付!
|
||||||
|
附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。
|
||||||
|
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||||
|
不同开发语言下的证书格式不同,以下为说明指引:
|
||||||
|
证书pkcs12格式(apiclient_cert.p12)
|
||||||
|
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
|
||||||
|
部分安全性要求较高的API需要使用该证书来确认您的调用身份
|
||||||
|
windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000)
|
||||||
|
证书pem格式(apiclient_cert.pem)
|
||||||
|
从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
|
||||||
|
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
|
||||||
|
您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
|
||||||
|
证书密钥pem格式(apiclient_key.pem)
|
||||||
|
从apiclient_cert.p12中导出密钥部分的文件,为pem格式
|
||||||
|
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
|
||||||
|
您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
|
||||||
|
备注说明:
|
||||||
|
由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载
|
||||||
Loading…
Reference in New Issue