Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
冷斌
bds
Commits
e82f237b
Commit
e82f237b
authored
Jun 04, 2020
by
冷斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
微信 支付
parent
2bf62355
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
127 additions
and
128 deletions
+127
-128
Application/Home/Controller/WxpayController.class.php
+13
-13
Application/Home/Model/WxpayModel.class.php
+64
-65
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/WxPay.pub.config.php
+4
-4
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/cacert/apiclient_cert.pem
+20
-20
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/cacert/apiclient_key.pem
+26
-26
No files found.
Application/Home/Controller/WxpayController.class.php
View file @
e82f237b
...
@@ -23,7 +23,7 @@ class WxpayController extends Controller{
...
@@ -23,7 +23,7 @@ class WxpayController extends Controller{
$total_fee
=
$find
[
's_price'
]
*
100
;
//支付金额(乘以100)
$total_fee
=
$find
[
's_price'
]
*
100
;
//支付金额(乘以100)
// $total_fee = 0.01 * 100;//支付金额(乘以100)
// $total_fee = 0.01 * 100;//支付金额(乘以100)
$notify_url
=
'http://www.
yhctvip
.com/Home/Wxpay/notifyurl'
;
//回调地址
$notify_url
=
'http://www.
zjyg6
.com/Home/Wxpay/notifyurl'
;
//回调地址
$order
=
$wx
->
getPrePayOrder
(
$body
,
$out_trade_no
,
$total_fee
,
$notify_url
);
//调用微信支付的方法
$order
=
$wx
->
getPrePayOrder
(
$body
,
$out_trade_no
,
$total_fee
,
$notify_url
);
//调用微信支付的方法
...
@@ -33,13 +33,13 @@ class WxpayController extends Controller{
...
@@ -33,13 +33,13 @@ class WxpayController extends Controller{
// echo json_encode(array('status' => 1, 'prepay_order' => no_null($order1)));
// echo json_encode(array('status' => 1, 'prepay_order' => no_null($order1)));
$oty
=
M
(
'order'
)
->
where
(
'order_num = "'
.
$out_trade_no
.
'"'
)
->
setField
(
'order_type'
,
2
);
//
$oty = M('order')->where('order_num = "'.$out_trade_no.'"')->setField('order_type',2);
//
$otys
=
M
(
'order'
)
->
where
(
'order_num = "'
.
$out_trade_no
.
'"'
)
->
setField
(
'pay_type'
,
3
);
//
$otys = M('order')->where('order_num = "'.$out_trade_no.'"')->setField('pay_type',3);
//
$mem
=
M
(
'order'
)
->
field
(
'id'
)
->
where
(
'order_num = "'
.
$out_trade_no
.
'"'
)
->
find
();
//
$mem = M('order')->field('id')->where('order_num = "'.$out_trade_no.'"')->find();
//
$ordertype
=
M
(
'order_goods'
)
->
where
(
'order_id = '
.
$mem
[
'id'
])
->
setField
(
'status'
,
2
);
//
$ordertype = M('order_goods')->where('order_id = '.$mem['id'])->setField('status',2);
...
@@ -74,7 +74,7 @@ class WxpayController extends Controller{
...
@@ -74,7 +74,7 @@ class WxpayController extends Controller{
$input
->
SetTime_start
(
date
(
"YmdHis"
));
$input
->
SetTime_start
(
date
(
"YmdHis"
));
$input
->
SetTime_expire
(
date
(
"YmdHis"
,
time
()
+
600
));
$input
->
SetTime_expire
(
date
(
"YmdHis"
,
time
()
+
600
));
$input
->
SetGoods_tag
(
"test"
);
$input
->
SetGoods_tag
(
"test"
);
$input
->
SetNotify_url
(
"http://www.
yhctvip
.com/Home/Wxpay/notifyurl"
);
$input
->
SetNotify_url
(
"http://www.
zjyg6
.com/Home/Wxpay/notifyurl"
);
$input
->
SetTrade_type
(
"JSAPI"
);
$input
->
SetTrade_type
(
"JSAPI"
);
$input
->
SetOpenid
(
$tsk
[
'openid'
]);
$input
->
SetOpenid
(
$tsk
[
'openid'
]);
$order
=
\WxPayApi
::
unifiedOrder
(
$input
);
$order
=
\WxPayApi
::
unifiedOrder
(
$input
);
...
@@ -100,7 +100,8 @@ class WxpayController extends Controller{
...
@@ -100,7 +100,8 @@ class WxpayController extends Controller{
$notify
=
new
\Notify_pub
();
$notify
=
new
\Notify_pub
();
//存储微信的回调
//存储微信的回调
$xml
=
$GLOBALS
[
'HTTP_RAW_POST_DATA'
];
// $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$xml
=
file_get_contents
(
'php://input'
);
$notify
->
saveData
(
$xml
);
$notify
->
saveData
(
$xml
);
//验证签名,并回应微信。
//验证签名,并回应微信。
...
@@ -114,7 +115,6 @@ class WxpayController extends Controller{
...
@@ -114,7 +115,6 @@ class WxpayController extends Controller{
$notify
->
setReturnParameter
(
"return_code"
,
"SUCCESS"
);
//设置返回码
$notify
->
setReturnParameter
(
"return_code"
,
"SUCCESS"
);
//设置返回码
}
}
$returnXml
=
$notify
->
returnXml
();
$returnXml
=
$notify
->
returnXml
();
echo
$returnXml
;
//==商户根据实际情况设置相应的处理流程,此处仅作举例=======
//==商户根据实际情况设置相应的处理流程,此处仅作举例=======
...
@@ -165,9 +165,9 @@ class WxpayController extends Controller{
...
@@ -165,9 +165,9 @@ class WxpayController extends Controller{
//
//
// file_put_contents($filename, $oty.'=='.$ordertype, FILE_APPEND);
// file_put_contents($filename, $oty.'=='.$ordertype, FILE_APPEND);
echo
'SUCCESS'
;
//
echo 'SUCCESS';
}
}
}
}
echo
$returnXml
;
}
}
}
}
Application/Home/Model/WxpayModel.class.php
View file @
e82f237b
<?php
<?php
namespace
Home\Model
;
namespace
Home\Model
;
use
Think\Model
;
use
Think\Model
;
class
WxpayModel
{
class
WxpayModel
{
//接口API URL前缀
//接口API URL前缀
const
API_URL_PREFIX
=
'https://api.mch.weixin.qq.com'
;
const
API_URL_PREFIX
=
'https://api.mch.weixin.qq.com'
;
//下单地址URL
//下单地址URL
...
@@ -26,26 +30,29 @@ class WxpayModel{
...
@@ -26,26 +30,29 @@ class WxpayModel{
//支付总金额
//支付总金额
private
$total_fee
;
private
$total_fee
;
//终端IP
//终端IP
private
$spbill_create_ip
;
private
$spbill_create_ip
;
//支付结果回调通知地址
//支付结果回调通知地址
private
$notify_url
;
private
$notify_url
;
//交易类型
//交易类型
private
$trade_type
;
private
$trade_type
;
//支付密钥
//支付密钥
private
$key
;
private
$key
;
//证书路径
//证书路径
private
$SSLCERT_PATH
;
private
$SSLCERT_PATH
;
private
$SSLKEY_PATH
;
private
$SSLKEY_PATH
;
//所有参数
//所有参数
private
$params
=
array
();
private
$params
=
[];
private
$config
=
[
'appid'
=>
"wxea130ad0abf37505"
,
/*微信开放平台上的应用id*/
'appSecret'
=>
'a9e52f1e9368ee2655cfbb7ad8cf1121'
,
'mch_id'
=>
"1592613321"
,
//"1440493402", /*微信申请成功之后邮件中的商户id*/
'api_key'
=>
"To3VvVD8X9aTjqUpk2uLFRq6A9vjWzZb"
/*在微信商户平台上自己设定的api密钥 32位*/
];
private
$config
=
array
(
'appid'
=>
"wx8504016ab1c4530f"
,
/*微信开放平台上的应用id*/
'mch_id'
=>
"1536579071"
,
//"1440493402", /*微信申请成功之后邮件中的商户id*/
'api_key'
=>
"caiyin19890000000000000000000000"
/*在微信商户平台上自己设定的api密钥 32位*/
);
//获取预支付订单
//获取预支付订单
public
function
getPrePayOrder
(
$body
,
$out_trade_no
,
$total_fee
,
$notify_url
){
public
function
getPrePayOrder
(
$body
,
$out_trade_no
,
$total_fee
,
$notify_url
)
{
$url
=
"https://api.mch.weixin.qq.com/pay/unifiedorder"
;
$url
=
"https://api.mch.weixin.qq.com/pay/unifiedorder"
;
$onoce_str
=
$this
->
getRandChar
(
32
);
$onoce_str
=
$this
->
getRandChar
(
32
);
...
@@ -71,7 +78,7 @@ class WxpayModel{
...
@@ -71,7 +78,7 @@ class WxpayModel{
}
}
/**
/**
*
作用:将xml转为array
*
作用:将xml转为array
*/
*/
public
function
xmlToArray
(
$xml
)
public
function
xmlToArray
(
$xml
)
{
{
...
@@ -81,7 +88,8 @@ class WxpayModel{
...
@@ -81,7 +88,8 @@ class WxpayModel{
}
}
//执行第二次签名,才能返回给客户端使用
//执行第二次签名,才能返回给客户端使用
public
function
getOrder
(
$prepayId
){
public
function
getOrder
(
$prepayId
)
{
$data
[
"appid"
]
=
$this
->
config
[
"appid"
];
$data
[
"appid"
]
=
$this
->
config
[
"appid"
];
$data
[
"noncestr"
]
=
$this
->
getRandChar
(
32
);;
$data
[
"noncestr"
]
=
$this
->
getRandChar
(
32
);;
$data
[
"package"
]
=
"Sign=WXPay"
;
$data
[
"package"
]
=
"Sign=WXPay"
;
...
@@ -99,8 +107,7 @@ class WxpayModel{
...
@@ -99,8 +107,7 @@ class WxpayModel{
*/
*/
function
getSign
(
$Obj
)
function
getSign
(
$Obj
)
{
{
foreach
(
$Obj
as
$k
=>
$v
)
foreach
(
$Obj
as
$k
=>
$v
)
{
{
$Parameters
[
strtolower
(
$k
)]
=
$v
;
$Parameters
[
strtolower
(
$k
)]
=
$v
;
}
}
//签名步骤一:按字典序排序参数
//签名步骤一:按字典序排序参数
...
@@ -108,7 +115,7 @@ class WxpayModel{
...
@@ -108,7 +115,7 @@ class WxpayModel{
$String
=
$this
->
formatBizQueryParaMap
(
$Parameters
,
false
);
$String
=
$this
->
formatBizQueryParaMap
(
$Parameters
,
false
);
//echo "【string】 =".$String."</br>";
//echo "【string】 =".$String."</br>";
//签名步骤二:在string后加入KEY
//签名步骤二:在string后加入KEY
$String
=
$String
.
"&key="
.
$this
->
config
[
'api_key'
];
$String
=
$String
.
"&key="
.
$this
->
config
[
'api_key'
];
// echo "<textarea style='width: 50%; height: 150px;'>$String</textarea> <br />";
// echo "<textarea style='width: 50%; height: 150px;'>$String</textarea> <br />";
//签名步骤三:MD5加密
//签名步骤三:MD5加密
$result_
=
strtoupper
(
md5
(
$String
));
$result_
=
strtoupper
(
md5
(
$String
));
...
@@ -116,13 +123,14 @@ class WxpayModel{
...
@@ -116,13 +123,14 @@ class WxpayModel{
}
}
//获取指定长度的随机字符串
//获取指定长度的随机字符串
function
getRandChar
(
$length
){
function
getRandChar
(
$length
)
{
$str
=
null
;
$str
=
null
;
$strPol
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
;
$strPol
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
;
$max
=
strlen
(
$strPol
)
-
1
;
$max
=
strlen
(
$strPol
)
-
1
;
for
(
$i
=
0
;
$i
<
$length
;
$i
++
)
{
for
(
$i
=
0
;
$i
<
$length
;
$i
++
)
{
$str
.=
$strPol
[
rand
(
0
,
$max
)];
//rand($min,$max)生成介于min和max两个数之间的一个随机整数
$str
.=
$strPol
[
rand
(
0
,
$max
)];
//rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
}
return
$str
;
return
$str
;
...
@@ -132,33 +140,31 @@ class WxpayModel{
...
@@ -132,33 +140,31 @@ class WxpayModel{
function
arrayToXml
(
$arr
)
function
arrayToXml
(
$arr
)
{
{
$xml
=
"<xml>"
;
$xml
=
"<xml>"
;
foreach
(
$arr
as
$key
=>
$val
)
foreach
(
$arr
as
$key
=>
$val
)
{
{
if
(
is_numeric
(
$val
))
{
if
(
is_numeric
(
$val
))
$xml
.=
"<"
.
$key
.
">"
.
$val
.
"</"
.
$key
.
">"
;
{
$xml
.=
"<"
.
$key
.
">"
.
$val
.
"</"
.
$key
.
">"
;
}
else
{
$xml
.=
"<"
.
$key
.
"><![CDATA["
.
$val
.
"]]></"
.
$key
.
">"
;
}
}
else
$xml
.=
"<"
.
$key
.
"><![CDATA["
.
$val
.
"]]></"
.
$key
.
">"
;
}
}
$xml
.=
"</xml>"
;
$xml
.=
"</xml>"
;
return
$xml
;
return
$xml
;
}
}
//post https请求,CURLOPT_POSTFIELDS xml格式
//post https请求,CURLOPT_POSTFIELDS xml格式
function
postXmlCurl
(
$xml
,
$url
,
$second
=
30
)
function
postXmlCurl
(
$xml
,
$url
,
$second
=
30
)
{
{
//初始化curl
//初始化curl
$ch
=
curl_init
();
$ch
=
curl_init
();
//超时时间
//超时时间
curl_setopt
(
$ch
,
CURLOPT_TIMEOUT
,
$second
);
curl_setopt
(
$ch
,
CURLOPT_TIMEOUT
,
$second
);
//这里设置代理,如果有的话
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt
(
$ch
,
CURLOPT_URL
,
$url
);
curl_setopt
(
$ch
,
CURLOPT_URL
,
$url
);
curl_setopt
(
$ch
,
CURLOPT_SSL_VERIFYPEER
,
FALSE
);
curl_setopt
(
$ch
,
CURLOPT_SSL_VERIFYPEER
,
FALSE
);
curl_setopt
(
$ch
,
CURLOPT_SSL_VERIFYHOST
,
FALSE
);
curl_setopt
(
$ch
,
CURLOPT_SSL_VERIFYHOST
,
FALSE
);
//设置header
//设置header
curl_setopt
(
$ch
,
CURLOPT_HEADER
,
FALSE
);
curl_setopt
(
$ch
,
CURLOPT_HEADER
,
FALSE
);
//要求结果为字符串且输出到屏幕上
//要求结果为字符串且输出到屏幕上
...
@@ -169,15 +175,12 @@ class WxpayModel{
...
@@ -169,15 +175,12 @@ class WxpayModel{
//运行curl
//运行curl
$data
=
curl_exec
(
$ch
);
$data
=
curl_exec
(
$ch
);
//返回结果
//返回结果
if
(
$data
)
if
(
$data
)
{
{
curl_close
(
$ch
);
curl_close
(
$ch
);
return
$data
;
return
$data
;
}
}
else
{
else
{
$error
=
curl_errno
(
$ch
);
$error
=
curl_errno
(
$ch
);
echo
"curl出错,错误码:
$error
"
.
"<br>"
;
echo
"curl出错,错误码:
$error
"
.
"<br>"
;
echo
"<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>"
;
echo
"<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>"
;
curl_close
(
$ch
);
curl_close
(
$ch
);
return
false
;
return
false
;
...
@@ -206,62 +209,59 @@ class WxpayModel{
...
@@ -206,62 +209,59 @@ class WxpayModel{
{
{
$buff
=
""
;
$buff
=
""
;
ksort
(
$paraMap
);
ksort
(
$paraMap
);
foreach
(
$paraMap
as
$k
=>
$v
)
foreach
(
$paraMap
as
$k
=>
$v
)
{
{
if
(
$urlencode
)
{
if
(
$urlencode
)
{
$v
=
urlencode
(
$v
);
$v
=
urlencode
(
$v
);
}
}
$buff
.=
strtolower
(
$k
)
.
"="
.
$v
.
"&"
;
$buff
.=
strtolower
(
$k
)
.
"="
.
$v
.
"&"
;
}
}
$reqPar
=
''
;
$reqPar
=
''
;
if
(
strlen
(
$buff
)
>
0
)
if
(
strlen
(
$buff
)
>
0
)
{
{
$reqPar
=
substr
(
$buff
,
0
,
strlen
(
$buff
)
-
1
);
$reqPar
=
substr
(
$buff
,
0
,
strlen
(
$buff
)
-
1
);
}
}
return
$reqPar
;
return
$reqPar
;
}
}
/**
/**
xml转成数组
*
xml转成数组
*/
*/
// function xmlstr_to_array($xmlstr) {
// function xmlstr_to_array($xmlstr) {
// $doc = new DOMDocument();
// $doc = new DOMDocument();
// $doc->loadXML($xmlstr);
// $doc->loadXML($xmlstr);
// return $this->domnode_to_array($doc->documentElement);
// return $this->domnode_to_array($doc->documentElement);
// }
// }
function
domnode_to_array
(
$node
)
{
function
domnode_to_array
(
$node
)
$output
=
array
();
{
$output
=
[];
switch
(
$node
->
nodeType
)
{
switch
(
$node
->
nodeType
)
{
case
XML_CDATA_SECTION_NODE
:
case
XML_CDATA_SECTION_NODE
:
case
XML_TEXT_NODE
:
case
XML_TEXT_NODE
:
$output
=
trim
(
$node
->
textContent
);
$output
=
trim
(
$node
->
textContent
);
break
;
break
;
case
XML_ELEMENT_NODE
:
case
XML_ELEMENT_NODE
:
for
(
$i
=
0
,
$m
=
$node
->
childNodes
->
length
;
$i
<
$m
;
$i
++
)
{
for
(
$i
=
0
,
$m
=
$node
->
childNodes
->
length
;
$i
<
$m
;
$i
++
)
{
$child
=
$node
->
childNodes
->
item
(
$i
);
$child
=
$node
->
childNodes
->
item
(
$i
);
$v
=
$this
->
domnode_to_array
(
$child
);
$v
=
$this
->
domnode_to_array
(
$child
);
if
(
isset
(
$child
->
tagName
))
{
if
(
isset
(
$child
->
tagName
))
{
$t
=
$child
->
tagName
;
$t
=
$child
->
tagName
;
if
(
!
isset
(
$output
[
$t
]))
{
if
(
!
isset
(
$output
[
$t
]))
{
$output
[
$t
]
=
array
()
;
$output
[
$t
]
=
[]
;
}
}
$output
[
$t
][]
=
$v
;
$output
[
$t
][]
=
$v
;
}
}
elseif
(
$v
)
{
elseif
(
$v
)
{
$output
=
(
string
)
$v
;
$output
=
(
string
)
$v
;
}
}
}
}
if
(
is_array
(
$output
))
{
if
(
is_array
(
$output
))
{
if
(
$node
->
attributes
->
length
)
{
if
(
$node
->
attributes
->
length
)
{
$a
=
array
()
;
$a
=
[]
;
foreach
(
$node
->
attributes
as
$attrName
=>
$attrNode
)
{
foreach
(
$node
->
attributes
as
$attrName
=>
$attrNode
)
{
$a
[
$attrName
]
=
(
string
)
$attrNode
->
value
;
$a
[
$attrName
]
=
(
string
)
$attrNode
->
value
;
}
}
$output
[
'@attributes'
]
=
$a
;
$output
[
'@attributes'
]
=
$a
;
}
}
foreach
(
$output
as
$t
=>
$v
)
{
foreach
(
$output
as
$t
=>
$v
)
{
if
(
is_array
(
$v
)
&&
count
(
$v
)
==
1
&&
$t
!=
'@attributes'
)
{
if
(
is_array
(
$v
)
&&
count
(
$v
)
==
1
&&
$t
!=
'@attributes'
)
{
$output
[
$t
]
=
$v
[
0
];
$output
[
$t
]
=
$v
[
0
];
}
}
}
}
...
@@ -271,4 +271,4 @@ class WxpayModel{
...
@@ -271,4 +271,4 @@ class WxpayModel{
return
$output
;
return
$output
;
}
}
}
}
\ No newline at end of file
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/WxPay.pub.config.php
View file @
e82f237b
...
@@ -6,11 +6,11 @@ class WxPayConf_pub
...
@@ -6,11 +6,11 @@ class WxPayConf_pub
{
{
//=======【基本信息设置】=====================================
//=======【基本信息设置】=====================================
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
const
APPID
=
'wx
8504016ab1c4530f
'
;
const
APPID
=
'wx
ea130ad0abf37505
'
;
//受理商ID,身份标识
//受理商ID,身份标识
const
MCHID
=
'15
3657907
1'
;
const
MCHID
=
'15
9261332
1'
;
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看
const
KEY
=
'
caiyin19890000000000000000000000
'
;
const
KEY
=
'
To3VvVD8X9aTjqUpk2uLFRq6A9vjWzZb
'
;
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
const
APPSECRET
=
''
;
const
APPSECRET
=
''
;
...
@@ -25,7 +25,7 @@ class WxPayConf_pub
...
@@ -25,7 +25,7 @@ class WxPayConf_pub
//=======【异步通知url设置】===================================
//=======【异步通知url设置】===================================
//异步通知url,商户根据实际开发过程设定
//异步通知url,商户根据实际开发过程设定
const
NOTIFY_URL
=
'http://www.
yhctvip
.com/Home/Wxpay/notifyurl'
;
const
NOTIFY_URL
=
'http://www.
zjyg6
.com/Home/Wxpay/notifyurl'
;
//=======【curl超时设置】===================================
//=======【curl超时设置】===================================
//本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒
//本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒
...
...
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/cacert/apiclient_cert.pem
View file @
e82f237b
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID
9jCCAt6gAwIBAgIUIE4svb4LuIRq46mWNRyH9jhw0xo
wDQYJKoZIhvcNAQEL
MIID
/DCCAuSgAwIBAgIUI2au3Rc6pgUtcw/KkNLKHu+KtZE
wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNM
TkwNTI4MDgwNzI0WhcNMjQwNTI2MDgwNzI0WjCBhz
ETMBEGA1UEAwwK
Q0EwHhcNM
jAwNjAzMDgwMTU4WhcNMjUwNjAyMDgwMTU4WjCBjT
ETMBEGA1UEAwwK
MTU
zNjU3OTA3MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTMwMQ
YDVQQL
MTU
5MjYxMzMyMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTkwNw
YDVQQL
D
Crlm5vlt53mmJPotK3kupHllYbnvZHnu5znp5HmioDmnInpmZDlhazlj7gxCzAJ
D
DDmlIDmnp3oirHluILlvIDlv4PkuIDotK3nvZHnu5znp5HmioDmnInpmZDlhazl
BgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQAD
j7gxCzAJBgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcN
ggEPADCCAQoCggEBAMewBiEGTT+eSH2yocv4B6AF2g6fo23cdAO1+L0I6GCjwIc1
AQEBBQADggEPADCCAQoCggEBAKx5WtUfG34HbedELPUgPN6us8XUoQknL1PZoaW5
ZVdlHvwS1PYBSVsDZ5C2E/5pd8lsVJGcpw3kYNRaBrs+iCpNGoldJG8m8wqw4Fzy
NWKBTf2en4fCt05CP7slEefUAm4fUrJJL5it0SSSQkwG+RiqB5fw0PQEgMez7MM3
9lZxqc2cyBrKTvlYfOhCm8PY105cVPmcGYbzKsFvVgSoiPS9T7eLV1VxGe+lKusE
KzQI1aOdSwmLatyee7yFYeccB3xYIlACvai39qrHc+nPiUMjc3ZaIza7fivl45e7
SkXEexO43cZhAuQE5BtLHmazjjDjMOQ3Fjv36xnZ8x7IJrcQ80Nb7C6y7kim34RF
0H/etyAiJ+hFsEMViD+WffI8fufr1mPIwkcCfpLoSefrazMZtBzrJwFzNXnpL1lH
5E9H0zMJwlqMKEfyiCZe+IHhvrZxlY+jZKFijcdO3DBSTqp9nZhDpP9KCRAqpqP+
STEjtyHdkNSrOv2nnVpg2F0yq3AfoykGRQrDc+vPS3XzoD39MIasPgM4WcvcBVHQ
AIFRgxwYbuAo3wCHTfmDBpdzBCla2L1CdnP8eX8CAwEAAaOBgTB/MAkGA1UdEwQC
mHxbgNGZY0b8TtPKb90DouACwFM5QjChncRlHtda6w7D/a8CAwEAAaOBgTB/MAkG
MAAwCwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0
A1UdEwQCMAAwCwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9l
cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2
dmNhLml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERC
Q
UQzOTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAGiDxCcEf
Q
zA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEA
O1Kt9QHGM7iQPY3gu0o9tLI4kDnmUaw4e3ZfGiGpT50hcFYMnd6rs0w+1Bbi66KR
KBKZtu0ine7uFOxieMLRw5m0HbOcmawuFJ+hw1EBvJ/iKJapnCxZr3egGhv950zz
REJFgm1seja4tZvbINTS/37r81+oRKBllneGBa48AqBCb8xC2sz43QlX12ySS1dO
u8g+ktZDBChvRYT6s65+nb+0oAkL+hZyj4SfcPFblCMc7qkN1903o5HSPc+QXK4B
JjxMLgFiclPJu7R/5D3UJr3pziKpz40o4nlQQXYQjbYifcQE495STou/sutzwnMs
KGgmXvFMXSHPVa04utgxeYzOOTo3VzEXGP3R4eXmyp38MPl7WhmMeM7J00zdpyrV
ZLn8twcUlnf6wyxF3VtJpryXO3iqn5/dVf5nCFHuqwt+8qfSJnIE0XnBwaVLXd4R
5ig4zOEJ0H3FZZS5wlZ2qoDzpRh8MvYgpe4Bb/YACNfbnqa6vjriKFz3iRF+ezOc
sK9pfnRIxybHTOWHgnReGYmUpbExAG327w+Epk4z0IeAd7lk+WeQmqp3QIzdwZ/k
H3E3YbP/2L69pXDkIAHeyo94nnTbUVpiG9g4WOF+EkJsAQC6ZBL6PFrhpdpCVD5F
UolkK/nDPTJMsA
==
sQA60QKj87T/WHsceRo1ow
==
-----END CERTIFICATE-----
-----END CERTIFICATE-----
ThinkPHP/Library/Vendor/Wxpay/WxPayPubHelper/cacert/apiclient_key.pem
View file @
e82f237b
-----BEGIN PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEv
QIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHsAYhBk0/nkh9
MIIEv
gIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCseVrVHxt+B23n
sqHL+AegBdoOn6Nt3HQDtfi9COhgo8CHNWVXZR78EtT2AUlbA2eQthP+aXfJbFSR
RCz1IDzerrPF1KEJJy9T2aGluTVigU39np+HwrdOQj+7JRHn1AJuH1KySS+YrdEk
nKcN5GDUWga7PogqTRqJXSRvJvMKsOBc8vZWcanNnMgayk75WHzoQpvD2NdOXFT5
kkJMBvkYqgeX8ND0BIDHs+zDNys0CNWjnUsJi2rcnnu8hWHnHAd8WCJQAr2ot/aq
nBmG8yrBb1YEqIj0vU+3i1dVcRnvpSrrBEpFxHsTuN3GYQLkBOQbSx5ms44w4zDk
x3Ppz4lDI3N2WiM2u34r5eOXu9B/3rcgIifoRbBDFYg/ln3yPH7n69ZjyMJHAn6S
NxY79+sZ2fMeyCa3EPNDW+wusu5Ipt+EReRPR9MzCcJajChH8ogmXviB4b62cZWP
6Enn62szGbQc6ycBczV56S9ZR0kxI7ch3ZDUqzr9p51aYNhdMqtwH6MpBkUKw3Pr
o2ShYo3HTtwwUk6qfZ2YQ6T/SgkQKqaj/gCBUYMcGG7gKN8Ah035gwaXcwQpWti9
z0t186A9/TCGrD4DOFnL3AVR0Jh8W4DRmWNG/E7Tym/dA6LgAsBTOUIwoZ3EZR7X
QnZz/Hl/AgMBAAECggEAQernewtbgL69a1EGfBB6Y+bKnr0v89osKfVuEOjZ3Nzx
WusOw/2vAgMBAAECggEBAIp7ohgPMxbdRjxzvBlRui4eXhARKv/ba5/K1YToEdo2
dzC3LWxiGBAXYMX38yVikLCqVPd35XPvTsoJk1pqZG77feAcjuo48lNe7ZpL7KGK
8nUaQQNTr7TxcpSELj1TOGRNWCv4oXPY1F2l5f9/ddB87T3tSQk0+GXgrNEN4e2U
z
uQdUVfgF9HDdKSIAWOmh/1E8heoq2NrYaKYAqZO3N/l40/HNhMwN4S15ayaRTMI
z
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
ZM1/LQEsz0tHgSvS+WN9vBY=
pmuJQwO7Kqoq29tMkgA8ILUs
-----END PRIVATE KEY-----
-----END PRIVATE KEY-----
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment