From 4c8005a9ab2aff37c9808b740a889072ab3e0133 Mon Sep 17 00:00:00 2001 From: devil_gong Date: Wed, 29 May 2019 14:04:35 +0800 Subject: [PATCH] wx pay debug --- application/lang/zh-cn.php | 3 +- application/service/OrderAftersaleService.php | 3 +- extend/payment/Alipay.php | 6 +- extend/payment/AlipayMini.php | 88 +++++++++++++ extend/payment/Weixin.php | 123 +++++++++++++++++- public/appmini/old/alipay/app.js | 2 +- public/appmini/old/weixin/app.js | 2 +- public/core.php | 7 +- weixin-cert/apiclient_cert.p12 | Bin 0 -> 2876 bytes weixin-cert/apiclient_cert.pem | 26 ++++ weixin-cert/apiclient_key.pem | 28 ++++ ...7\347\224\250\350\257\264\346\230\216.txt" | 18 +++ 12 files changed, 288 insertions(+), 18 deletions(-) create mode 100755 weixin-cert/apiclient_cert.p12 create mode 100755 weixin-cert/apiclient_cert.pem create mode 100755 weixin-cert/apiclient_key.pem create mode 100755 "weixin-cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" diff --git a/application/lang/zh-cn.php b/application/lang/zh-cn.php index ac13a29be..ed3a1353f 100755 --- a/application/lang/zh-cn.php +++ b/application/lang/zh-cn.php @@ -120,7 +120,8 @@ return array( 'common_platform_type' => array( 'pc' => array('value' => 'pc', 'name' => 'PC网站'), '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' => '支付宝小程序'), 'weixin' => array('value' => 'weixin', 'name' => '微信小程序'), 'baidu' => array('value' => 'baidu', 'name' => '百度小程序'), diff --git a/application/service/OrderAftersaleService.php b/application/service/OrderAftersaleService.php index b32c68e94..8152eb4ec 100644 --- a/application/service/OrderAftersaleService.php +++ b/application/service/OrderAftersaleService.php @@ -850,7 +850,8 @@ class OrderAftersaleService $pay_params = [ 'order_no' => $order['order_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'].'元', ]; $ret = (new $pay_name($payment[0]['config']))->Refund($pay_params); diff --git a/extend/payment/Alipay.php b/extend/payment/Alipay.php index 2e1bd9121..8b05ff4ba 100755 --- a/extend/payment/Alipay.php +++ b/extend/payment/Alipay.php @@ -298,7 +298,7 @@ class Alipay ], [ 'checked_type' => 'empty', - 'key_name' => 'refund_amount', + 'key_name' => 'refund_price', '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( @@ -324,7 +324,7 @@ class Alipay $biz_content = array( 'out_trade_no' => $params['order_no'], 'trade_no' => $params['trade_no'], - 'refund_amount' => $params['refund_amount'], + 'refund_amount' => $params['refund_price'], 'refund_reason' => $refund_reason, ); $parameter['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE); diff --git a/extend/payment/AlipayMini.php b/extend/payment/AlipayMini.php index b1073ee3a..085d25286 100755 --- a/extend/payment/AlipayMini.php +++ b/extend/payment/AlipayMini.php @@ -240,6 +240,94 @@ class AlipayMini 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 生成参数和签名] * @param [array] $data [待生成的参数] diff --git a/extend/payment/Weixin.php b/extend/payment/Weixin.php index c92a38705..8d25531aa 100755 --- a/extend/payment/Weixin.php +++ b/extend/payment/Weixin.php @@ -100,6 +100,24 @@ class Weixin 'is_required' => 0, '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', 'title' => '异步通知协议', @@ -107,7 +125,7 @@ class Weixin 'name' => 'agreement', 'is_multiple' => 0, 'element_data' => [ - ['value'=>1, 'name'=>'默认当前http协议'], + ['value'=>1, 'name'=>'默认当前协议'], ['value'=>2, 'name'=>'强制https转http协议'], ], ], @@ -426,6 +444,92 @@ class Weixin 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 @@ -533,13 +637,20 @@ class Weixin 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文件 - // $options[CURLOPT_SSLCERTTYPE] = 'PEM'; - // $options[CURLOPT_SSLCERT] = WEB_ROOT.'cert/wechat_app_apiclient_cert.pem'; - // $options[CURLOPT_SSLKEYTYPE] = 'PEM'; - // $options[CURLOPT_SSLKEY] = WEB_ROOT.'cert/wechat_app_apiclient_key.pem'; + $options[CURLOPT_SSLCERTTYPE] = 'PEM'; + $options[CURLOPT_SSLCERT] = ROOT.'weixin-cert/apiclient_cert.pem'; + $options[CURLOPT_SSLKEYTYPE] = 'PEM'; + $options[CURLOPT_SSLKEY] = ROOT.'weixin-cert/apiclient_key.pem'; } $ch = curl_init($url); diff --git a/public/appmini/old/alipay/app.js b/public/appmini/old/alipay/app.js index 86d9662ec..f2dbae81b 100755 --- a/public/appmini/old/alipay/app.js +++ b/public/appmini/old/alipay/app.js @@ -174,7 +174,7 @@ App({ return ( this.data.request_url + "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 + "&user_id=" + user_id + diff --git a/public/appmini/old/weixin/app.js b/public/appmini/old/weixin/app.js index 39a9059d4..65656c018 100755 --- a/public/appmini/old/weixin/app.js +++ b/public/appmini/old/weixin/app.js @@ -168,7 +168,7 @@ App({ return ( this.data.request_url + "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 + "&user_id=" + user_id + diff --git a/public/core.php b/public/core.php index 92c37630b..226c2f7ea 100755 --- a/public/core.php +++ b/public/core.php @@ -48,13 +48,10 @@ define('ROOT', str_replace('public'.DS, '', ROOT_PATH)); // 定义应用目录 define('APP_PATH', ROOT.'application'.DS); -// 请求应用 [web, app] 默认web +// 请求应用 [web, app] 默认web(ios|android|小程序 均为app) define('APPLICATION', empty($_REQUEST['application']) ? 'web' : trim($_REQUEST['application'])); -// 请求客户端 [default, ...] 默认default -define('APPLICATION_CLIENT', empty($_REQUEST['application_client']) ? 'default' : trim($_REQUEST['application_client'])); - -// 请求客户端 [pc, h5, alipay, weixin, baidu] 默认pc +// 请求客户端 [pc, h5, ios, android, alipay, weixin, baidu] 默认pc(目前系统为自适应,h5需自行校验) define('APPLICATION_CLIENT_TYPE', empty($_REQUEST['application_client_type']) ? 'pc' : trim($_REQUEST['application_client_type'])); // 是否ajax diff --git a/weixin-cert/apiclient_cert.p12 b/weixin-cert/apiclient_cert.p12 new file mode 100755 index 0000000000000000000000000000000000000000..1f12343a4ec84cf50b46c14e98f23b11770abfec GIT binary patch literal 2876 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 Q9y$gOgEk?G#8%Zm0a(Oevj6}9 literal 0 HcmV?d00001 diff --git a/weixin-cert/apiclient_cert.pem b/weixin-cert/apiclient_cert.pem new file mode 100755 index 000000000..a8b105cf9 --- /dev/null +++ b/weixin-cert/apiclient_cert.pem @@ -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----- diff --git a/weixin-cert/apiclient_key.pem b/weixin-cert/apiclient_key.pem new file mode 100755 index 000000000..2b6d965cb --- /dev/null +++ b/weixin-cert/apiclient_key.pem @@ -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----- diff --git "a/weixin-cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" "b/weixin-cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" new file mode 100755 index 000000000..a775010b3 --- /dev/null +++ "b/weixin-cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" @@ -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)下载 \ No newline at end of file -- GitLab