添加后台代理代码
This commit is contained in:
79
codes/agent/game/api/payment/wechat/WxPay.AppPay.php
Normal file
79
codes/agent/game/api/payment/wechat/WxPay.AppPay.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . "/lib/WxPay.Api.php";
|
||||
|
||||
/**
|
||||
*
|
||||
* APP支付实现类
|
||||
* @author widyhu
|
||||
*
|
||||
*/
|
||||
class AppPay
|
||||
{
|
||||
/**
|
||||
*
|
||||
* 参数数组转换为url参数
|
||||
* @param array $urlObj
|
||||
*/
|
||||
private function ToUrlParams($urlObj)
|
||||
{
|
||||
$buff = "";
|
||||
foreach ($urlObj as $k => $v)
|
||||
{
|
||||
$buff .= $k . "=" . $v . "&";
|
||||
}
|
||||
|
||||
$buff = trim($buff, "&");
|
||||
return $buff;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成直接支付url,支付url有效期为2小时,模式二
|
||||
* @param WxPayUnifiedOrder $input
|
||||
* @param array $wechatInfo
|
||||
* @return array
|
||||
* @throws WxPayException
|
||||
*/
|
||||
public function GetPayPrepayId($input, $wechatInfo)
|
||||
{
|
||||
if ($input->GetTrade_type() == "APP")
|
||||
{
|
||||
$result = WxPayApi::unifiedOrder($input, 6, $wechatInfo);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取app支付的参数
|
||||
* @param array $UnifiedOrderResult 统一支付接口返回的数据
|
||||
* @param array $weixinInfo 微信公众号相关信息
|
||||
* @throws WxPayException
|
||||
*
|
||||
* @return string json数据,可直接填入js函数作为参数
|
||||
*/
|
||||
public function GetAppApiParameters($UnifiedOrderResult, $weixinInfo)
|
||||
{
|
||||
if(!array_key_exists("appid", $UnifiedOrderResult)
|
||||
|| !array_key_exists("prepay_id", $UnifiedOrderResult)
|
||||
|| $UnifiedOrderResult['prepay_id'] == "")
|
||||
{
|
||||
throw new WxPayException("参数错误");
|
||||
}
|
||||
|
||||
$appapi = new WxPayAppApiPay();
|
||||
$appapi->SetAppid($UnifiedOrderResult["appid"]);
|
||||
$appapi->SetPartnerId($UnifiedOrderResult["mch_id"]);
|
||||
$appapi->SetPrepayId($UnifiedOrderResult["prepay_id"]);
|
||||
$timeStamp = time();
|
||||
$appapi->SetTimeStamp($timeStamp);
|
||||
$appapi->SetNonceStr(WxPayApi::getNonceStr());
|
||||
$appapi->SetPackage("Sign=WXPay");
|
||||
$appapi->SetSign($appapi->MakeSign($weixinInfo));
|
||||
$back_arr=$appapi->GetValues();
|
||||
$back_arr['prepay_id']=$UnifiedOrderResult["prepay_id"];
|
||||
$parameters = json_encode($appapi->GetValues());
|
||||
return $parameters;
|
||||
}
|
||||
}
|
||||
207
codes/agent/game/api/payment/wechat/WxPay.JsApiPay.php
Normal file
207
codes/agent/game/api/payment/wechat/WxPay.JsApiPay.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
require_once "lib/WxPay.Api.php";
|
||||
/**
|
||||
*
|
||||
* JSAPI支付实现类
|
||||
* 该类实现了从微信公众平台获取code、通过code获取openid和access_token、
|
||||
* 生成jsapi支付js接口所需的参数、生成获取共享收货地址所需的参数
|
||||
*
|
||||
* 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发
|
||||
*
|
||||
* @author widy
|
||||
*
|
||||
*/
|
||||
class JsApiPay {
|
||||
/**
|
||||
*
|
||||
* 网页授权接口微信服务器返回的数据,返回样例如下
|
||||
* {
|
||||
* "access_token":"ACCESS_TOKEN",
|
||||
* "expires_in":7200,
|
||||
* "refresh_token":"REFRESH_TOKEN",
|
||||
* "openid":"OPENID",
|
||||
* "scope":"SCOPE",
|
||||
* "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
||||
* }
|
||||
* 其中access_token可用于获取共享收货地址
|
||||
* openid是微信支付jsapi支付接口必须的参数
|
||||
* @var array
|
||||
*/
|
||||
public $data = null;
|
||||
|
||||
/**
|
||||
*
|
||||
* 通过跳转获取用户的openid,跳转流程如下:
|
||||
* 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
|
||||
* 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
|
||||
*
|
||||
* @return 用户的openid
|
||||
*/
|
||||
public function GetOpenid()
|
||||
{
|
||||
//通过code获得openid
|
||||
if (!isset($_GET['code'])){
|
||||
//触发微信返回code码
|
||||
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
|
||||
$url = $this->__CreateOauthUrlForCode($baseUrl);
|
||||
Header("Location: $url");
|
||||
exit();
|
||||
} else {
|
||||
//获取code码,以获取openid
|
||||
$code = $_GET['code'];
|
||||
$openid = $this->getOpenidFromMp($code);
|
||||
return $openid;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取jsapi支付的参数
|
||||
* @param array $UnifiedOrderResult 统一支付接口返回的数据
|
||||
* @param array $weixinInfo 微信公众号相关信息
|
||||
* @throws WxPayException
|
||||
*
|
||||
* @return json数据,可直接填入js函数作为参数
|
||||
*/
|
||||
public function GetJsApiParameters($UnifiedOrderResult, $weixinInfo)
|
||||
{
|
||||
if(!array_key_exists("appid", $UnifiedOrderResult)
|
||||
|| !array_key_exists("prepay_id", $UnifiedOrderResult)
|
||||
|| $UnifiedOrderResult['prepay_id'] == "")
|
||||
{
|
||||
throw new WxPayException("参数错误");
|
||||
}
|
||||
$jsapi = new WxPayJsApiPay();
|
||||
$jsapi->SetAppid($UnifiedOrderResult["appid"]);
|
||||
$timeStamp = time();
|
||||
$jsapi->SetTimeStamp("$timeStamp");
|
||||
$jsapi->SetNonceStr(WxPayApi::getNonceStr());
|
||||
$jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
|
||||
$jsapi->SetSignType("MD5");
|
||||
$jsapi->SetPaySign($jsapi->MakeSign($weixinInfo));
|
||||
$parameters = json_encode($jsapi->GetValues());
|
||||
return $parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 通过code从工作平台获取openid机器access_token
|
||||
* @param string $code 微信跳转回来带上的code
|
||||
*
|
||||
* @return openid
|
||||
*/
|
||||
public function GetOpenidFromMp($code)
|
||||
{
|
||||
$url = $this->__CreateOauthUrlForOpenid($code);
|
||||
//初始化curl
|
||||
$ch = curl_init();
|
||||
//设置超时
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout);
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
|
||||
curl_setopt($ch, CURLOPT_HEADER, FALSE);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0"
|
||||
&& WxPayConfig::CURL_PROXY_PORT != 0){
|
||||
curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST);
|
||||
curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT);
|
||||
}
|
||||
//运行curl,结果以jason形式返回
|
||||
$res = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
//取出openid
|
||||
$data = json_decode($res,true);
|
||||
$this->data = $data;
|
||||
$openid = $data['openid'];
|
||||
return $openid;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 拼接签名字符串
|
||||
* @param array $urlObj
|
||||
*
|
||||
* @return 返回已经拼接好的字符串
|
||||
*/
|
||||
private function ToUrlParams($urlObj)
|
||||
{
|
||||
$buff = "";
|
||||
foreach ($urlObj as $k => $v)
|
||||
{
|
||||
if($k != "sign"){
|
||||
$buff .= $k . "=" . $v . "&";
|
||||
}
|
||||
}
|
||||
|
||||
$buff = trim($buff, "&");
|
||||
return $buff;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取地址js参数
|
||||
*
|
||||
* @return 获取共享收货地址js函数需要的参数,json格式可以直接做参数使用
|
||||
*/
|
||||
public function GetEditAddressParameters()
|
||||
{
|
||||
$getData = $this->data;
|
||||
$data = array();
|
||||
$data["appid"] = WxPayConfig::APPID;
|
||||
$data["url"] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
|
||||
$time = time();
|
||||
$data["timestamp"] = "$time";
|
||||
$data["noncestr"] = "1234568";
|
||||
$data["accesstoken"] = $getData["access_token"];
|
||||
ksort($data);
|
||||
$params = $this->ToUrlParams($data);
|
||||
$addrSign = sha1($params);
|
||||
|
||||
$afterData = array(
|
||||
"addrSign" => $addrSign,
|
||||
"signType" => "sha1",
|
||||
"scope" => "jsapi_address",
|
||||
"appId" => WxPayConfig::APPID,
|
||||
"timeStamp" => $data["timestamp"],
|
||||
"nonceStr" => $data["noncestr"]
|
||||
);
|
||||
$parameters = json_encode($afterData);
|
||||
return $parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 构造获取code的url连接
|
||||
* @param string $redirectUrl 微信服务器回跳的url,需要url编码
|
||||
*
|
||||
* @return 返回构造好的url
|
||||
*/
|
||||
private function __CreateOauthUrlForCode($redirectUrl)
|
||||
{
|
||||
$urlObj["appid"] = WxPayConfig::APPID;
|
||||
$urlObj["redirect_uri"] = "$redirectUrl";
|
||||
$urlObj["response_type"] = "code";
|
||||
$urlObj["scope"] = "snsapi_base";
|
||||
$urlObj["state"] = "STATE"."#wechat_redirect";
|
||||
$bizString = $this->ToUrlParams($urlObj);
|
||||
return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 构造获取open和access_toke的url地址
|
||||
* @param string $code,微信跳转带回的code
|
||||
*
|
||||
* @return 请求的url
|
||||
*/
|
||||
private function __CreateOauthUrlForOpenid($code)
|
||||
{
|
||||
$urlObj["appid"] = WxPayConfig::APPID;
|
||||
$urlObj["secret"] = WxPayConfig::APPSECRET;
|
||||
$urlObj["code"] = $code;
|
||||
$urlObj["grant_type"] = "authorization_code";
|
||||
$bizString = $this->ToUrlParams($urlObj);
|
||||
return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
|
||||
}
|
||||
}
|
||||
147
codes/agent/game/api/payment/wechat/WxPay.MicroPay.php
Normal file
147
codes/agent/game/api/payment/wechat/WxPay.MicroPay.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
require_once dirname(__FILE__) . "/lib/WxPay.Api.php";
|
||||
/**
|
||||
*
|
||||
* 刷卡支付实现类
|
||||
* 该类实现了一个刷卡支付的流程,流程如下:
|
||||
* 1、提交刷卡支付
|
||||
* 2、根据返回结果决定是否需要查询订单,如果查询之后订单还未变则需要返回查询(一般反复查10次)
|
||||
* 3、如果反复查询10订单依然不变,则发起撤销订单
|
||||
* 4、撤销订单需要循环撤销,一直撤销成功为止(注意循环次数,建议10次)
|
||||
*
|
||||
* 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发,为了防止
|
||||
* 查询时hold住后台php进程,商户查询和撤销逻辑可在前端调用
|
||||
*
|
||||
* @author widy
|
||||
*
|
||||
*/
|
||||
class MicroPay
|
||||
{
|
||||
/**
|
||||
*
|
||||
* 提交刷卡支付,并且确认结果,接口比较慢
|
||||
* @param WxPayMicroPay $microPayInput
|
||||
* @throws WxpayException
|
||||
* @return 返回查询接口的结果
|
||||
*/
|
||||
public function pay($microPayInput)
|
||||
{
|
||||
//①、提交被扫支付
|
||||
$result = WxPayApi::micropay($microPayInput, 5);
|
||||
//如果返回成功
|
||||
if(!array_key_exists("return_code", $result)
|
||||
|| !array_key_exists("out_trade_no", $result)
|
||||
|| !array_key_exists("result_code", $result))
|
||||
{
|
||||
echo "接口调用失败,请确认是否输入是否有误!";
|
||||
throw new WxPayException("接口调用失败!");
|
||||
}
|
||||
|
||||
//签名验证
|
||||
$out_trade_no = $microPayInput->GetOut_trade_no();
|
||||
|
||||
//②、接口调用成功,明确返回调用失败
|
||||
if($result["return_code"] == "SUCCESS" &&
|
||||
$result["result_code"] == "FAIL" &&
|
||||
$result["err_code"] != "USERPAYING" &&
|
||||
$result["err_code"] != "SYSTEMERROR")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//③、确认支付是否成功
|
||||
$queryTimes = 10;
|
||||
while($queryTimes > 0)
|
||||
{
|
||||
$succResult = 0;
|
||||
$queryResult = $this->query($out_trade_no, $succResult);
|
||||
//如果需要等待1s后继续
|
||||
if($succResult == 2){
|
||||
sleep(2);
|
||||
continue;
|
||||
} else if($succResult == 1){//查询成功
|
||||
return $queryResult;
|
||||
} else {//订单交易失败
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//④、次确认失败,则撤销订单
|
||||
if(!$this->cancel($out_trade_no))
|
||||
{
|
||||
throw new WxpayException("撤销单失败!");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 查询订单情况
|
||||
* @param string $out_trade_no 商户订单号
|
||||
* @param int $succCode 查询订单结果
|
||||
* @return 0 订单不成功,1表示订单成功,2表示继续等待
|
||||
*/
|
||||
public function query($out_trade_no, &$succCode)
|
||||
{
|
||||
$queryOrderInput = new WxPayOrderQuery();
|
||||
$queryOrderInput->SetOut_trade_no($out_trade_no);
|
||||
$result = WxPayApi::orderQuery($queryOrderInput);
|
||||
|
||||
if($result["return_code"] == "SUCCESS"
|
||||
&& $result["result_code"] == "SUCCESS")
|
||||
{
|
||||
//支付成功
|
||||
if($result["trade_state"] == "SUCCESS"){
|
||||
$succCode = 1;
|
||||
return $result;
|
||||
}
|
||||
//用户支付中
|
||||
else if($result["trade_state"] == "USERPAYING"){
|
||||
$succCode = 2;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//如果返回错误码为“此交易订单号不存在”则直接认定失败
|
||||
if($result["err_code"] == "ORDERNOTEXIST")
|
||||
{
|
||||
$succCode = 0;
|
||||
} else{
|
||||
//如果是系统错误,则后续继续
|
||||
$succCode = 2;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 撤销订单,如果失败会重复调用10次
|
||||
* @param string $out_trade_no
|
||||
* @param 调用深度 $depth
|
||||
*/
|
||||
public function cancel($out_trade_no, $depth = 0)
|
||||
{
|
||||
if($depth > 10){
|
||||
return false;
|
||||
}
|
||||
|
||||
$clostOrder = new WxPayReverse();
|
||||
$clostOrder->SetOut_trade_no($out_trade_no);
|
||||
$result = WxPayApi::reverse($clostOrder);
|
||||
|
||||
//接口调用失败
|
||||
if($result["return_code"] != "SUCCESS"){
|
||||
return false;
|
||||
}
|
||||
|
||||
//如果结果为success且不需要重新调用撤销,则表示撤销成功
|
||||
if($result["result_code"] != "SUCCESS"
|
||||
&& $result["recall"] == "N"){
|
||||
return true;
|
||||
} else if($result["recall"] == "Y") {
|
||||
return $this->cancel($out_trade_no, ++$depth);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
58
codes/agent/game/api/payment/wechat/WxPay.NativePay.php
Normal file
58
codes/agent/game/api/payment/wechat/WxPay.NativePay.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
require_once dirname(__FILE__) . "/lib/WxPay.Api.php";
|
||||
|
||||
/**
|
||||
*
|
||||
* 刷卡支付实现类
|
||||
* @author widyhu
|
||||
*
|
||||
*/
|
||||
class NativePay
|
||||
{
|
||||
/**
|
||||
*
|
||||
* 生成扫描支付URL,模式一
|
||||
* @param BizPayUrlInput $bizUrlInfo
|
||||
*/
|
||||
public function GetPrePayUrl($productId)
|
||||
{
|
||||
$biz = new WxPayBizPayUrl();
|
||||
$biz->SetProduct_id($productId);
|
||||
$values = WxpayApi::bizpayurl($biz);
|
||||
$url = "weixin://wxpay/bizpayurl?" . $this->ToUrlParams($values);
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 参数数组转换为url参数
|
||||
* @param array $urlObj
|
||||
*/
|
||||
private function ToUrlParams($urlObj)
|
||||
{
|
||||
$buff = "";
|
||||
foreach ($urlObj as $k => $v)
|
||||
{
|
||||
$buff .= $k . "=" . $v . "&";
|
||||
}
|
||||
|
||||
$buff = trim($buff, "&");
|
||||
return $buff;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成直接支付url,支付url有效期为2小时,模式二
|
||||
* @param WxPayUnifiedOrder $input
|
||||
* @param array $wechatInfo
|
||||
* @return array
|
||||
* @throws WxPayException
|
||||
*/
|
||||
public function GetPayUrl($input, $wechatInfo)
|
||||
{
|
||||
if($input->GetTrade_type() == "NATIVE")
|
||||
{
|
||||
$result = WxPayApi::unifiedOrder($input, 6, $wechatInfo);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEYjCCA8ugAwIBAgIDEOVzMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MDIwMzA0NDAwN1oX
|
||||
DTI2MDEzMTA0NDAwN1owgZIxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||
EwVNTVBheTEnMCUGA1UEAxQe5rGf6KW/5aSp55ub572R57uc5pyJ6ZmQ5YWs5Y+4
|
||||
MREwDwYDVQQEEwgxMDY4NjEyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBAOw+QLt0FlpT6IxEKR30JSyVIYy9ShS9KMfjNsLOUZLQyNmZhov+E6PdcUTs
|
||||
6YwylWEOfmFKqIiVZG2zd2xlq7qEu8aD9Fk/xxO7RRJP4vnkmUyNLaK5d+Kxc/77
|
||||
q8HWZWUyDuCoxEsRuEVez8fkMBbtyqzlysf0V4hrUMdxreIJDqcQbRTCfi4j7D2h
|
||||
WSb6/xC5xxFC7xr1TdBatCeLaYWiYuMnlUrdC3sXvE+qhFsjxDqM8n+iOVByIQ4R
|
||||
lOtV8wEKWIRMwgK5WSd4Fetdl+vsRwkdEZwTKli8MDqBTCqJnzYPosXuE0pY8xr6
|
||||
nBHkq6mrFskyhso+BLb6svHNfHMCAwEAAaOCAUYwggFCMAkGA1UdEwQCMAAwLAYJ
|
||||
YIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNhdGUiMB0GA1Ud
|
||||
DgQWBBQ8viOAiSWjFdhsowaiKzIiAloafzCBvwYDVR0jBIG3MIG0gBQ+BSb2ImK0
|
||||
FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1
|
||||
YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNlbnQxDDAK
|
||||
BgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3DQEJARYQ
|
||||
bW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQEAwIGwDAWBgNV
|
||||
HSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQCPgdGBRrVE5Fet
|
||||
w/Mi8NMMgOcxZGs/xHZKtw/kHaZqWfmEGa4W5+X3juVG6TrYuek+2RwGE6qfLhAG
|
||||
HtiESs2Pvws1WbUSaFeyjWFzgbcyjMlj/3DS+J2Hq4voRSBruxJ0DaunwTzlwtIn
|
||||
MaKfGusX4QlLZIa3Ga+37bHKp29HEA==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQDsPkC7dBZaU+iM
|
||||
RCkd9CUslSGMvUoUvSjH4zbCzlGS0MjZmYaL/hOj3XFE7OmMMpVhDn5hSqiIlWRt
|
||||
s3dsZau6hLvGg/RZP8cTu0UST+L55JlMjS2iuXfisXP++6vB1mVlMg7gqMRLEbhF
|
||||
Xs/H5DAW7cqs5crH9FeIa1DHca3iCQ6nEG0Uwn4uI+w9oVkm+v8QuccRQu8a9U3Q
|
||||
WrQni2mFomLjJ5VK3Qt7F7xPqoRbI8Q6jPJ/ojlQciEOEZTrVfMBCliETMICuVkn
|
||||
eBXrXZfr7EcJHRGcEypYvDA6gUwqiZ82D6LF7hNKWPMa+pwR5KupqxbJMobKPgS2
|
||||
+rLxzXxzAgMBAAECggEALiMOQ02tm+BtNw+MtCPdKrLJRZImKJy0nSz7odnnRnPt
|
||||
9cks5KQvM75og5x9E/tA/x50gg2xklMStPXqqcnFWvzXKzLUAqYY+/qDx8rAOitx
|
||||
4OhldDUie6xKSg7egVGcpcG79BYhl8OTKEEW9SPUXHX+MfwCuUA35BWJRhomalEY
|
||||
csgdCV+g95zcSGHAJAg4Hd1cl/FLVujMyIogdhXtR3lJvfLGNS95fSnELfPG45RR
|
||||
38d1NPdV28zv7y/nMnypnJ5ccp3vl3TYl8OsSNttLkchFVpuB4p2/3Ze3fe3LtAU
|
||||
luAJ5xpU790LyaFm7CDo1kcSMasRZgLTecfqJRa/8QKBgQD4dIPFLKKE4fusdVr3
|
||||
EbwwF4Lco8n9Osv3RYgvcjXNlP54iv2APOUiNGpf/nKtVuQDhrzYrbRpQ9h1gImH
|
||||
JRj/xmw8nCMa77fZX6MxUopJ+f0f2Eeogei8GR+4QgD0/buZZA0IFTmSPx3Uqqky
|
||||
DN+7BbEOU2kNbBACqbairX2fqQKBgQDzas127uRh4X4JtpfHb2zZX2SXEzUnZU8g
|
||||
jR/TDNp+AnhoXpg1LYmHdKfac+bWNZvUs7TMi6cSF3cXvSNwMbqyraWrFBk1CZir
|
||||
gwVbE1xau2I8H2wI4BJCC+ZZCqGPY4s1n/5jbFCnzZEDORwjkEDnxq5l0AdgqhTG
|
||||
vCv2kJR8uwKBgEVgY5sfR5JLd/dEHc53yVC0f/oUUka/sEyvwcNd5OAvBo+qX/b7
|
||||
ChBvCnUbm/IDHVBOw1TNzF7Ibx0Ac2alWUGyqm6SOss+vNuZ9PvEzJCzmZbW0cuf
|
||||
2tkLOuw8of/HCide5LSpGJZZwX6s2On85kxW3oXdjKwOzLmxoinyv+1hAoGACv9r
|
||||
UxFODkIS4Lt4NhGJuHR/5fd/Mk14er8FjhKJmKHh8M09UUHCcfVKVCtiZZE8fiq0
|
||||
Y313yfB3eAIapMoKZmJEFuusi+HoHO+pgUjppkvLD25YAjqleIhzGtjJHeJgesbE
|
||||
xpcxObOm9p9Q7yZoWFB4tq7kdnCYybXcwqIbo1sCf0HF5pBw9vqB94Pm5QkkEz/l
|
||||
i7vFKDGciivLV5GpINAZ7Bp6FVzUEyLBtWO50KyLwL/VHIiPJG2p3appShNnKyPN
|
||||
Ve9NuFqSSFfKygSvHne4uceuY/wW9wDK6io5KPhGHjdE3K4fpXR/xU417wk0sQCo
|
||||
X6obKKFmExUdyqWiNrs=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
欢迎使用微信支付!
|
||||
微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书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证书(rootca.pem)
|
||||
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性
|
||||
该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
|
||||
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
|
||||
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEazCCA9SgAwIBAgIDFIzzMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MDMwNzA5MTAxOVoX
|
||||
DTI2MDMwNTA5MTAxOVowgZsxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||
EwVNTVBheTEwMC4GA1UEAxQn5Y2X5piM5biC57qs5bqm5paH5YyW5Lyg5aqS5pyJ
|
||||
6ZmQ5YWs5Y+4MREwDwYDVQQEEwgxMTQ5OTYzODCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBAKnCWH1h9+C1ql7MxGqz3h2AA1fDIKmDu7sETB5gmPY8bu1t
|
||||
1GaxiZb5771jEWMa14/cjUtvTaRgCb0fwANIaP+eeovEC2alZLxytTAgLgsiToxt
|
||||
8Q6NP4xQBfYmyL3bswggnr1EKIC2Kr8HMcxFb04xJVAx0h4RHqZYd/0q/t1vV1re
|
||||
yv2VZR+g+E7SGhO2GiKHn9C74QZWU5qe4PDblwLjqYZbxOQslF433zY7DkTrAg7m
|
||||
wxNxKBXRH3ddvVdVWH0uq1pbuZ9oYJsjhuWARr1BlmUhwXGeXiTiIkSBbO8cxauX
|
||||
XtsthCjKnn1zHHUcNWKb6n4AS/pqaTALBI4xEZ8CAwEAAaOCAUYwggFCMAkGA1Ud
|
||||
EwQCMAAwLAYJYIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNh
|
||||
dGUiMB0GA1UdDgQWBBQQMIGcrddYlWvqyEDH28EqxguTATCBvwYDVR0jBIG3MIG0
|
||||
gBQ+BSb2ImK0FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQ
|
||||
BgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1Rl
|
||||
bmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqG
|
||||
SIb3DQEJARYQbW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQE
|
||||
AwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQAU
|
||||
kvUtbEqjnzI+96Q2i+CqouD5b1VaRppaRFfbuE9oBNwouS3Im/EtIBI+LV4pQmYM
|
||||
x64fdPZp7sxseOciX1qAruoYSB7mjSdiqB3vbk6hJ62viA2jqzXO4ol+ghKC5nmO
|
||||
lJIBZaHJZB8jXkxIbeMlLu8EiJMi/VyL6dlGk82fLg==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpwlh9Yffgtape
|
||||
zMRqs94dgANXwyCpg7u7BEweYJj2PG7tbdRmsYmW+e+9YxFjGteP3I1Lb02kYAm9
|
||||
H8ADSGj/nnqLxAtmpWS8crUwIC4LIk6MbfEOjT+MUAX2Jsi927MIIJ69RCiAtiq/
|
||||
BzHMRW9OMSVQMdIeER6mWHf9Kv7db1da3sr9lWUfoPhO0hoTthoih5/Qu+EGVlOa
|
||||
nuDw25cC46mGW8TkLJReN982Ow5E6wIO5sMTcSgV0R93Xb1XVVh9LqtaW7mfaGCb
|
||||
I4blgEa9QZZlIcFxnl4k4iJEgWzvHMWrl17bLYQoyp59cxx1HDVim+p+AEv6amkw
|
||||
CwSOMRGfAgMBAAECggEATNaK9zXA3RVdaEuHHEUN5Ixs9ux7fD8EWkI3sghHNC1m
|
||||
iFGOMm1pucynlzGgTRt5NsS9r8dRfXV68v/MCbBc1lcFYP37qxpx3lqNaJsoPCHr
|
||||
K+UXl16XxQrzp9cmRcmL38HkGAchziCmeJDpGWzUVLAqE4J5eOKG3QRuS0mK0u81
|
||||
5lU9X29CYab05jrm/4lhQUijR6ubt8XRz6Gpskzf3hvMpiScHSEK8qCRfa6IV9z4
|
||||
G6cjwAM9kd8IT8lxCEvA2AQIHBtmwYcSBqfD2o40SBUVqwMlaH+4KtR+5y/VJ7H1
|
||||
lF3oogknpWGRgMqSIq2jA7Z3nAZY3SmCihG9C7NaAQKBgQDXwoBBn5y8ZfDYK16X
|
||||
qiFG78zbi0Bmni8wmyPX4jcvSjA69GWJvx1XBXFFle/sDP74p+6Wv5suZTx93jMI
|
||||
yaMs67vRzA7neLzFsT8R/QZb93bdvXPDPwORqGE5i9NnXPGzqPXh/UCkLW1u+4Lz
|
||||
5iqeUj5L+RTP48rBJgO8rFPkCQKBgQDJa4kIf43FBhqHTvK0cgA+iEDw3linHZOV
|
||||
sfzjU8N0VH4KTrTDABQkC+dtdKj52Ax8WSr93vXBK8bxR9KacQDL/AESKtown8j8
|
||||
R5Bp13mDS+y1VxphynK/99ZvP5g8mZArFhHpHzi8O1qArZrwG4LNCp9itYqmCMuR
|
||||
gFNwf/ZCZwKBgDMzNLxd5BPRHRYvNINJHBx5S2PN57pyT0B5kEfqpq3SLR/QX0gQ
|
||||
0iWUZQzeR9D8RIU9VKDxVyHrZC96SyIKt24xgqCGjALh4+oF5bGfGaM5VjvIeXAb
|
||||
w/0MuAWv6Lrek3zO24qFTpGnNhDgHnNCa1qmqaHdudKbe8HaA4kCW+YBAoGAVci+
|
||||
7CenMaqP0eEF7WRARmGxhuSrzUEDglXz5r3eGMWDiNBMnGCEM3X+ctekwAQMDUnM
|
||||
zaMP9921NT3prG1EcZw6uIoXs23aI9g24V0sG4dSoUkfq1aV2LytT2Q+alDc3fzg
|
||||
U/FAMKr2uKc3vdt5seo8R8YZ7u0ABlApOVjGgTECgYAf7HvCi4SPe7vkaWA3XkYK
|
||||
LQ1TFgKlcXHXdQA/EkvQ2bXiEDIvB+3jpYN9OUgzVA8AmA7V5ExLhz+QMBIwZQjN
|
||||
xejgan72hzn01MCd3Ldg8KWfQ4Wvey8S4AHNYi1tj/0xOV1hUROIZFtdMVWxjQ6K
|
||||
DyE+u6fwkPfMD9qNi/v7Nw==
|
||||
-----END PRIVATE KEY-----
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEYjCCA8ugAwIBAgIDI9viMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MDUwNjA1MTAwNloX
|
||||
DTI2MDUwNDA1MTAwNlowgZIxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||
EwVNTVBheTEnMCUGA1UEAxQe5rGf6KW/5LqR5a6256eR5oqA5pyJ6ZmQ5YWs5Y+4
|
||||
MREwDwYDVQQEEwgxMjA0MjQ0NzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBAKMJHRRqSqelvD7BJ/EsWXNkJEmOJW+dsB0/Zc4phMK+oh06FdNr57Ekk2Ga
|
||||
5vo4fLIw0VEXN49P4XKZRhVKwupVGocIe97/ovt2vzg8uqD4H/Go9Dxc3bphGkzo
|
||||
0s0ps5Gy5TW0zOVwotBxDwd7tMs2++JzJ2ZcnesqNfYiHYsTb+ljIAYP0bCaYGNi
|
||||
3NDbaykV9f1BkfgddV1LPn1XGRsOQFMcsjhRGP8TFGs0aLU5Rhm0jimmF4yvZwS7
|
||||
81Ah8wBquTCwy9+qrW+SCHmMFpftPmcKWTqhb683GX99l1+wKhWhTvab1UH5eQPR
|
||||
U+mk2Hak1kSFapTY1ojvlWerB/sCAwEAAaOCAUYwggFCMAkGA1UdEwQCMAAwLAYJ
|
||||
YIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNhdGUiMB0GA1Ud
|
||||
DgQWBBQG9ruoebdmJpnT3uFhkzVHdpEtUDCBvwYDVR0jBIG3MIG0gBQ+BSb2ImK0
|
||||
FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1
|
||||
YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNlbnQxDDAK
|
||||
BgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3DQEJARYQ
|
||||
bW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQEAwIGwDAWBgNV
|
||||
HSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQBX1xDB9Og/B9lQ
|
||||
roNlzQcm/LEhRZ1YIgDY8SkuXRBcXRcxpUY45oI8XrpCYEGAfjIxuSC8v1kgduSR
|
||||
Moy/06aaKT4AGO8z6q2jhBAywKEWGqqkPgiGe/meuba5z/0rSp32dC7upMVW4hlC
|
||||
F9udaeeGcWiq4qi34nDvg10GgtIZEQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjCR0Uakqnpbw+
|
||||
wSfxLFlzZCRJjiVvnbAdP2XOKYTCvqIdOhXTa+exJJNhmub6OHyyMNFRFzePT+Fy
|
||||
mUYVSsLqVRqHCHve/6L7dr84PLqg+B/xqPQ8XN26YRpM6NLNKbORsuU1tMzlcKLQ
|
||||
cQ8He7TLNvvicydmXJ3rKjX2Ih2LE2/pYyAGD9GwmmBjYtzQ22spFfX9QZH4HXVd
|
||||
Sz59VxkbDkBTHLI4URj/ExRrNGi1OUYZtI4ppheMr2cEu/NQIfMAarkwsMvfqq1v
|
||||
kgh5jBaX7T5nClk6oW+vNxl/fZdfsCoVoU72m9VB+XkD0VPppNh2pNZEhWqU2NaI
|
||||
75Vnqwf7AgMBAAECggEAG1ZS3vJ3tCaxKuCefu0NzrBy+TZxhoatWiogOvJxRWpL
|
||||
qpTrxfio7+YPJGWh50EDf6l535wB//DH/7w9qSJRDpPYj93XT2wT+xBNPfPI42bX
|
||||
jGDlGx4DO9Y+X7kGZ8pfRsX1cwzu8mXxlvvuJjYS+aQtliny6FINVLpONAhCZehG
|
||||
3G8GY3Gc7lOR0oNOOO13inL+BxJtsoqWfzXqXXT6hXuiXdBJ9fgQ35wpQwO9nxo2
|
||||
3BKuJD0z2z06bZS0Y+Vq4oy/SkhSV6lxpWWZxMkagrghqq4VpfDKC3bGpzDeHhFi
|
||||
hW02Lq12zpFcavc6PlFMuE9cgu/CGClzF+54nc7FMQKBgQDWB6cMcFIBc/3MhvuZ
|
||||
NKCNpu9QvI0ta5I+WxaLaDGeyOOqboV+K1hSezoXnWBCYEsHvr/QRLbZtKuIrXud
|
||||
1obSbimPAf+oDleUQAC7b5xTQWhs0KsyPJ3oeV7N1Ihk+/X2eKYwLCRa5GAdbmor
|
||||
Sws07VssbRY2KwgaePIV2UZw0wKBgQDDAYlRkJHYWF5rmn72WvA8uKDAjd+uoYzY
|
||||
Pr4b/8yany3rnKMi2imbippHEVE2FWIGk/LleeGcdkNVquGFDgeHWqfPj2cdJ8f3
|
||||
pKvC6F63EKmSIidT0C4pBMOtBczXR8Kq6qH/sXpy1xtxbXtZ+Jp0C3bKwHtFd8fC
|
||||
e7ifWUrTOQKBgCbWNKW5K+g/l+opBDaEqi2KARrxW9zGDD9sX+bj/T0Gzuj6LRb7
|
||||
3ob4/U2TrQfeWT8KidvM3DEc65Ndh3TYnJZKjxf4EN/52kJ4aqmYUxF4aO513tq6
|
||||
zRyGCYHn8ugAIF2c/ur215H2psowYuuALoRoHYcuND2YCVxkXelBB9spAoGAaNSH
|
||||
nGhqbvI6eAAK5qbGZO4fxMPADqHcFFfOXUDrHegaiIGhFVhQa8Rb4X6GuNtP4hdg
|
||||
yUn3JeRRmFkPeTash3ANrD/7/6lmD1Pf3hyK5kC3184ydBUC65wbEQWAM+7o0Hbn
|
||||
9YvUNq46m4RuflRtu5p6Fs7YteSJZ5yZCFi5J8kCgYAlWHO1QiEC0ITue2aIKZhT
|
||||
MmUzl601jG+/T6WoI50JB60RZt6SIPwF881pDt3UmPgAqIxVav5Dbh27P34r8dNE
|
||||
4ACaxVFUJhjB0l4oWmSH72zibn5XtanoKPHyKQAn7/Pu7SzDrka5ulUn9tYsRmPW
|
||||
Jfw2Cj+hnWXZZms+9YCboA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
欢迎使用微信支付!
|
||||
微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书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证书(rootca.pem)
|
||||
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性
|
||||
该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
|
||||
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
|
||||
BIN
codes/agent/game/api/payment/wechat/cert/1336980601.zip
Normal file
BIN
codes/agent/game/api/payment/wechat/cert/1336980601.zip
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEZjCCA8+gAwIBAgIEAWC1DTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA3MjUwMjI1NTda
|
||||
Fw0yNzA3MjMwMjI1NTdaMIGVMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxKjAoBgNVBAMUIeS4iumltuW4guS8iua1quS/oeaBr+aciemZkOWF
|
||||
rOWPuDERMA8GA1UEBBMIMTIwNDY3NzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQC5hYq9PSLruYqD7l+BDdLu3paqxBZcxkETopE7TiJR9i4crDZQpFYn
|
||||
qeF10DuYPPxZedDoW1MWms56u4nyhrwPOx8A+aIWXZKoPhb3TmO7oVC7B9nO6dzT
|
||||
CK84iwdJk60rAl11nrf8sjHUSsq6jdYt5HeVZSJX0zLKUx6JB0QYouiPbLyVlPfc
|
||||
2ZcLd5A6cNj/Wfgpf7OLNtUnK40Zd7N4CBPPQpIW72lR8dNIjuTaP2uZv5IlFTXD
|
||||
hllFTsSKPey/diWegP5rDGWVwVuzlTKpPAroxBO8JHDbWLtTdXo/o++8c/Tl4/p1
|
||||
BVOYDyrDCfp+//7tx3FxBW4TG1WjVR83AgMBAAGjggFGMIIBQjAJBgNVHRMEAjAA
|
||||
MCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAd
|
||||
BgNVHQ4EFgQUg/gk5Vl0YXBLqldA5sO1VQsZPjswgb8GA1UdIwSBtzCBtIAUPgUm
|
||||
9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQI
|
||||
EwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50
|
||||
MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0B
|
||||
CQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAw
|
||||
FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAspt9yTXN
|
||||
gSsm1mJQlDFNXi/3Ped4DxQOWAQZ9Dlkpvga9BJ59f3pxqQX8l4IrNlwCSsXbotv
|
||||
V5tBUe+F39hgZDLhvwQIqN6vkf1Oa4rfhxja4bA3MOpyz3jHB2bRDa9bPniiJKAm
|
||||
la9nieIxBpFk2/uNU0fJF2jW0VDNGu2/m9Y=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5hYq9PSLruYqD
|
||||
7l+BDdLu3paqxBZcxkETopE7TiJR9i4crDZQpFYnqeF10DuYPPxZedDoW1MWms56
|
||||
u4nyhrwPOx8A+aIWXZKoPhb3TmO7oVC7B9nO6dzTCK84iwdJk60rAl11nrf8sjHU
|
||||
Ssq6jdYt5HeVZSJX0zLKUx6JB0QYouiPbLyVlPfc2ZcLd5A6cNj/Wfgpf7OLNtUn
|
||||
K40Zd7N4CBPPQpIW72lR8dNIjuTaP2uZv5IlFTXDhllFTsSKPey/diWegP5rDGWV
|
||||
wVuzlTKpPAroxBO8JHDbWLtTdXo/o++8c/Tl4/p1BVOYDyrDCfp+//7tx3FxBW4T
|
||||
G1WjVR83AgMBAAECggEAMRyF9sSpaueKIJTI2XwUW8G29uvD07lz3sPJWH69nR7j
|
||||
ZBm+oyht2kAhfDOsowd58iHKSMhsPW6rvFfLE9XREOMguPxciTkqKrmNENjClBgH
|
||||
LAvO//Ruzbrdz8UWH8clL16H6SwkHpP5lu5Zrnr/uNRjR7wnFELHjkHksnem8jIy
|
||||
pT2xROerN2TzoprF/ESWKunTXw6eFotmRL5CLlRzd3QGWewr8bE1btkja2C63Oh7
|
||||
r7IYJbeFyJAf7pNdYP0159wF4Ou6OTHRTXBqtNM/liJ0+gZu3/if9D90qjTkbiRv
|
||||
IzZBUGJyciZDWRE1+EQMQsV3zIfoL47FTA1bl0KjKQKBgQDbvoJf3Fnp0EvR5aPR
|
||||
cQdNiEnaq9wtt05fW8agoNeylChoZw5al41g6O2TF+fNMtWCbYJyj95ZDGhr4CVq
|
||||
QUz02UL6gLoHevFwedlG05Yw+azecv053dhEeZtLarP3GS+Crr8XYleiMY3lJBBW
|
||||
Pnx3PHklI0s2raDDMD5ttiXGlQKBgQDYIY0r1BZa7SLRpw2fuZmsDbDzQtn4SW55
|
||||
1eSE4EpkjYeb+SDuzByAUNaIdPDWu74CujVdNM3d2alsF/vcZa1UMkC3295SMIOg
|
||||
4OqpY7U4ljkG8YdE9e3a0+4Hk0RMlRizAG9myxLVHn4YAhnoG0iyvzuaHooHzeZr
|
||||
Ec53GASXmwKBgCVMbOzAhjJ9vKDgDbJbMRYj8AVB7pmD57Wf6lMRegtBwqoV9AXE
|
||||
e6bbYpf5EsttuXfuBppTeTY8OO02mqMyelGFHy1N9EWYxKqGxC6Vc4TUnFcVxY2w
|
||||
7iiRS569edaTW9EewCjD9IP/TUp7mJpK+O10QkvfdcDOL99xrOcKZ9cRAoGBALIQ
|
||||
YmiboZdkC+3Cvhy8Ivl3hjPE/iPrC9Pg/xbiWygg2nsMc6+KBmlJMJbYEZw4rUE9
|
||||
/L0/xeRjcYwW7nAUbQsTI/LWeIIqaiffZjYMab+nNHCeCR4tp7tEI7WmBP07UVAY
|
||||
qa9825UuPCC3inSKFgj+OLKvOnVXk+DemMXRyebFAoGBAJ9BVDxOD+ZM5+JgJbVr
|
||||
M7wCviZMcs1RBGZXT5Zv2dHOvHwzZm8+My4ZN2Qkn1P0U91dcJcOlHeSIZg3cdn5
|
||||
JLPBF752joNVrUkb09Ysz9G3fLPbwmasnhQpGL9qKx5VIb/aUF2nvHMzGx3QB/Rb
|
||||
jJVyR3ycVyx2qzPlM/JSGVKO
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -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)下载
|
||||
BIN
codes/agent/game/api/payment/wechat/cert/1345625501.zip
Normal file
BIN
codes/agent/game/api/payment/wechat/cert/1345625501.zip
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEYzCCA8ygAwIBAgIEAdXMTjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xODAzMjQwMTU2Mzha
|
||||
Fw0yODAzMjEwMTU2MzhaMIGSMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxJzAlBgNVBAMUHuaxn+ilv+Wkqeebm+e9kee7nOaciemZkOWFrOWP
|
||||
uDERMA8GA1UEBBMIMTI0NDk3NjkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQDErnYk0r3LopXoX4ar754FFSrfR3VqZiFyQVUbSrzsdkt1eV3ImwOv1ted
|
||||
iLH/+qwDsKGPDfFVIztLo7nISRFlXfuYKMavi1g0Z4ZSqptJIhqmW3By5RY7oXBm
|
||||
tWxdgQKawEeEE/l10clQhZHKCtSby399hA6mYhcDs7XANFFzLWtLw8lbsqhKETaF
|
||||
RofCwi68uP18OBAkNDSZX7NnGtH7BWneTilqtppeD7oVh26Y4RyVSnz6/lIHFn0H
|
||||
3Bk8WcfAdtIJyFjNP1M5NmO8CLnQn9ru28QJ4j0j3whnZFsAeQSxo0EhqWCA81JX
|
||||
kZU69+3syYK470tdZn4r73fjO6VHAgMBAAGjggFGMIIBQjAJBgNVHRMEAjAAMCwG
|
||||
CWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAdBgNV
|
||||
HQ4EFgQUIfA/oAUCBxi66JhojpXx9yURofowgb8GA1UdIwSBtzCBtIAUPgUm9iJi
|
||||
tBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlH
|
||||
dWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQww
|
||||
CgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0BCQEW
|
||||
EG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAwFgYD
|
||||
VR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEACrdyhUP/F+4P
|
||||
cpb5MAezafFGyYftZ0mlHaUScwqSVDUnm7VZeMHV8MqHYVoedoVOMFVq+gGrl5kh
|
||||
77KocrWNrG2mnf9fGRm7WD6dtiihQKGRAf3DWIPGVlwGbiRlBg27AMVnZn7GpIUs
|
||||
j9yZuDQindR2/UpGCWwrYkGoumEeuok=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDErnYk0r3LopXo
|
||||
X4ar754FFSrfR3VqZiFyQVUbSrzsdkt1eV3ImwOv1tediLH/+qwDsKGPDfFVIztL
|
||||
o7nISRFlXfuYKMavi1g0Z4ZSqptJIhqmW3By5RY7oXBmtWxdgQKawEeEE/l10clQ
|
||||
hZHKCtSby399hA6mYhcDs7XANFFzLWtLw8lbsqhKETaFRofCwi68uP18OBAkNDSZ
|
||||
X7NnGtH7BWneTilqtppeD7oVh26Y4RyVSnz6/lIHFn0H3Bk8WcfAdtIJyFjNP1M5
|
||||
NmO8CLnQn9ru28QJ4j0j3whnZFsAeQSxo0EhqWCA81JXkZU69+3syYK470tdZn4r
|
||||
73fjO6VHAgMBAAECggEBAIj8slDnb0X70cltb1ElrbwAiEHHdaJLzBPWKT6/CWLw
|
||||
6ZHCnG1yeljonHieksulflV7mqsWnPYdedkvCeDT84fUs73A+NGfjinByS6eoVWI
|
||||
qWMg4OtFX/zcbns69WUSzAuYzLbTaraDDWJGBcrhTD/OttdnOQTt4PW1H2vlhK1g
|
||||
xgQmWajElq/CJtk+uhpwnNRsJTLCDI8xsxsOYIKUyf0oFVYrH57QktFlXI6brfnJ
|
||||
94GQ6O0BfWr0U06Rzq5ouSfdHnPdNOhI6DIJzArVa7yNMI5/alA3m2Ev47DCjTGl
|
||||
YGOpZ3/8jPZoqNkApFxHgyq9PCHAPA8hKp71KIs7BpECgYEA7RVmIEIsmFac3kKb
|
||||
19RcuuH4iIyOG/oVWsup7Lbm/vl9SFbBJJMObBUToLy6qlnCHaNHQvgMfst369vO
|
||||
vGI7PwzisQ4267FA4LN5KEUzp69st700iB4Pn8vnFPcje7x3SFNPQQVmZ7/m7HKx
|
||||
vTXhYFj+NYbCoBe69OKkBRbYgB0CgYEA1F/SKKldr19u9/IN5zCMd/Fb+q4BVgvS
|
||||
lh4O/yMIRDHO6spSVYN/HkpI7x2vraL2NFnYAXUERjl9WlEvQ5F4wLb0DYFAUyJa
|
||||
2SlhZnc3eOLz6eOpzzMBMzerHHoZsThCd661Y5WA06en44vIVkr921pW9NvH7rMa
|
||||
5cpJ5GCHhbMCgYBNEX+5TMmiW8VymsR+TJI4Tey0trwbbBg1A6+hO3Orvv5y3YC7
|
||||
mvI9QDy5K6Cib7siV0l7A5dMQGgjS7jQlD4eKNooJC7GP0CPyse/x38bK3Nz5xWE
|
||||
igEaOPZNYmkud/1ujWZeBJtdboxqoH4Wu8UfxM4eKEhsMkqcAHDBFsQaIQKBgCrg
|
||||
7d2n1HKEIjONe6Eh/Dp7UMbcOwjUekA08XIx8IlURSLClr0NP60t8mvU4pN8Q5lu
|
||||
Sl6A8cv774M8wP4zcN34Em5nmkUuuoj+AdxeVaTirbybar2a3rMomjO1s1pEsabY
|
||||
b2cb2FbjktIudtR1b6vKIaRue3+GSff7T8/8bWBhAoGAFg6paqQIBKYNSdfcvbfi
|
||||
x3YWECDtCLlXFiWha2pHtRE8CfLfSftZQ/49CnNw6EwtPXqgqRGIv4RqXfxYbwYA
|
||||
RWIGNUYToXI/jeSRpxtpFrlOroF5NhEBulD9Ti9/PgPs0cU0OPqWoxDPvg742stR
|
||||
uRbAYzG0KnwnasmutR5hjv8=
|
||||
-----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)下载
|
||||
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEYjCCA8ugAwIBAgIDKzqrMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MDYwNjA1MzAwNFoX
|
||||
DTI2MDYwNDA1MzAwNFowgZIxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||
EwVNTVBheTEnMCUGA1UEAxQe5rGf6KW/5LqR5a6256eR5oqA5pyJ6ZmQ5YWs5Y+4
|
||||
MREwDwYDVQQEEwgxMjcxNzUwODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBAMFQt5XNX8LigHtIrqhv8yGivPkRLPrsiNi1a2h8EYu3C409o/q4uwAuGH7s
|
||||
Fl/7ccH/+fY1qmfDt2MR5dAMZqV3/l7RG4bEPtJTEwNd6nzFvYZDcv7/KSdGDeF4
|
||||
dhNpT9oE0LaiC6P0Zdeur3AA92WbH2eN80IARYHp7vQQ4mXpxIJSB7jK93jCeCee
|
||||
Ss6ZZuk8PU/8b/B76XdwQ3R8eNvIqctjvWujVg/bA24TeGZEkBOHB4sXDpw8gHrX
|
||||
7sxYKcNIW6ZIy9/MKCS3hWbojp2JQq2FBktArmZ8pO++P2xpy86BK+x+hHc+ewKK
|
||||
dtOXGUI8Uxq08odZn8LzSpf9nJkCAwEAAaOCAUYwggFCMAkGA1UdEwQCMAAwLAYJ
|
||||
YIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNhdGUiMB0GA1Ud
|
||||
DgQWBBTIHrH8dXCHClscuO+GWQNVDiL9hjCBvwYDVR0jBIG3MIG0gBQ+BSb2ImK0
|
||||
FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1
|
||||
YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNlbnQxDDAK
|
||||
BgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3DQEJARYQ
|
||||
bW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQEAwIGwDAWBgNV
|
||||
HSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQBouw/N2u/qILi6
|
||||
rpxauVLzCLaDzMiewSpezEQq/jL44rxDkC6dvbphT7vYO487h1k2GfnbUA7R9Hsi
|
||||
W6l4bfRdHOLFYmF5nuXJSrgtsjko+iUQ+MJm/M2pb8ndHzZb5jq2MdQAN1VlIxdo
|
||||
uOgQ2R2OKSKNlQV6Ls4zHQ3uBPcd5g==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBULeVzV/C4oB7
|
||||
SK6ob/Mhorz5ESz67IjYtWtofBGLtwuNPaP6uLsALhh+7BZf+3HB//n2Napnw7dj
|
||||
EeXQDGald/5e0RuGxD7SUxMDXep8xb2GQ3L+/yknRg3heHYTaU/aBNC2oguj9GXX
|
||||
rq9wAPdlmx9njfNCAEWB6e70EOJl6cSCUge4yvd4wngnnkrOmWbpPD1P/G/we+l3
|
||||
cEN0fHjbyKnLY71ro1YP2wNuE3hmRJAThweLFw6cPIB61+7MWCnDSFumSMvfzCgk
|
||||
t4Vm6I6diUKthQZLQK5mfKTvvj9sacvOgSvsfoR3PnsCinbTlxlCPFMatPKHWZ/C
|
||||
80qX/ZyZAgMBAAECggEAGMoVAKy5XvBUsXp8izTv5JxNx1KghfzW/5MkFt3yEgyC
|
||||
+rWw1XHi6P8APSZhKCXCTLJah2wSUgQS/C1LXwZ4Ezfz8oy2Du4TcD0e7wuYCjAB
|
||||
QbpcgL6PtG2TUhp0acDTcI21hfX5sCii9ql77czx7KGbwVe+nfQS9bnd3oZbwd2j
|
||||
OXFqTRcBtDFyQL20DhNe70EtNOBwMfLpPKRv2sTQ4ONuRHj6PxebAntSUqunpZpb
|
||||
Thyh4vd13Tr7p7jt4jPLsHwfrAgs+m7T7PojcfDtJhYVloXHff12v75zTzbLXzAq
|
||||
K1OleCt2XLVA/Dc9ueq9lJwCBU6QKx4nLRQNT8tRQQKBgQDiL8QHyRVVRXwOIJFI
|
||||
nq8ao/ZRIjaAoc4ykb7RHRD9M9qy+PShyrQPH9yFhaZJhRSAoktRAaZMgKw+qKx2
|
||||
AFI81uTi8skZ3EEY7/kJ4YBmZFHtvt25z+K/1TCY6e8X41IkTmNZzr6X6LF7AxIb
|
||||
qvDVn3nxEJi2UIpuaeQC4UA8tQKBgQDay8XQN82NY41gVcPgUgy/8e00P+DUjNj+
|
||||
rbbqJBoZo6fOXzCjurWzj6oHC/IMHXDa6X91ugQq3/RjXkaYQodkFLm79LEDNMZy
|
||||
4fJ/iiXHQ3mBJOUDgLL1WqxVsHPP/Tn5Rm17+eX8JeVovcmwyCH0NiU+Df3ZtfJW
|
||||
K0TR5Ijy1QKBgH0kuG0mUGtReoXGdxua0H8I4KubJlSdMZzBDrZcQp4VJpeHLrKl
|
||||
mGIV2sj1XT+oJePV5532L7B8MNCqOmE/ZEDNFO6MLb/lIQ9PFpbk8Um1j67ev4aj
|
||||
Am3o4m54YBTzbOsxg76YqNMbp7bLyCUOuxk2lx1NdXDJtw3IAKOnRQdRAoGBANP9
|
||||
H5pQlv5o+G/gaTqNBQFs29EGG0aVeSG5GkLd29P/tvTDUhMxMh/aEHlnX4vRcqkI
|
||||
F5DvPF52QwmMLIYV36xeUF8GBAQBPE3PEe/04AmjHLS+FI5CQiJrShJ0NqHMzkDx
|
||||
td6rD+Qwq4fCawq3vf4qAAeR8uTf3v8SSUm8TdxJAoGAc2vfH5EeriwsKFhNbgg0
|
||||
dUvi0HjfksaUnLDTp6I2ZwgIIMohiYyvK2G0nMOUqjXaVWISebmXI9l7dD0WWiB1
|
||||
5oEdvzYSgXts3tG8PsluIYEdN/mMwnOSpZlMda0wK5SEXf7Okjn3b+I6cxryrWsk
|
||||
Uq3cA5DteK4q4AskLnpHK3w=
|
||||
-----END PRIVATE KEY-----
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEbDCCA9WgAwIBAgIEAgSijTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xODA2MTUwMzMwNTFa
|
||||
Fw0yODA2MTIwMzMwNTFaMIGbMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxMDAuBgNVBAMUJ+emj+W7uuWQm+aYk+mBk+e9kee7nOenkeaKgOac
|
||||
iemZkOWFrOWPuDERMA8GA1UEBBMIMTQ1OTQ3NDAwggEiMA0GCSqGSIb3DQEBAQUA
|
||||
A4IBDwAwggEKAoIBAQDIqmQiBJ1ZEvcWTl2TnnizE4MkCwUl0+EtivS+aF8ZfIDV
|
||||
aC6CZIyvLatq847rr252rQYkItdqSYNx9fK1TFiPsJ6kW8IlvhEYtS8z/tN5DhYV
|
||||
+FOlKQXMhdZlc7HMxU8ZSSN6L/C9nTQVHBUhgH2kyG7GFL3BxU+PjiJGXjAiqtFH
|
||||
fQcBdF1D3lg/jxlgXSAGmGSw7f2D4G0RxxBjodBXT2hQ75syqZIdCp57LR/SCeao
|
||||
UaNaX4gCsiWd/jvk5EERmDCKMOHAnVC75If1BWjTdOmdeDOOPo9UP68KX7XlIpJk
|
||||
wb4hIg0gUW9F7WPnBO8TamZu6pjK5HKlzaENeuANAgMBAAGjggFGMIIBQjAJBgNV
|
||||
HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmlj
|
||||
YXRlIjAdBgNVHQ4EFgQUw6vc4Vl+4BidEyfoYFZSDMyI4Tgwgb8GA1UdIwSBtzCB
|
||||
tIAUPgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIw
|
||||
EAYDVQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdU
|
||||
ZW5jZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkq
|
||||
hkiG9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8E
|
||||
BAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEA
|
||||
MjahXrdYVSNLGhYDyrNnh1ozd+CQShBTrdkLGjjVuGzC5frc/+31FCBcO7kTddJK
|
||||
N75ttAbkuejSzpLxZHTNBoTG9RAveTcbKMEH4i95TcRkTpHcFLnO6LKAFAkJQbC8
|
||||
friAP5g1vbc0eWzHv/OBCT/YojQDQJgAPBJ3nZZt+bQ=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIqmQiBJ1ZEvcW
|
||||
Tl2TnnizE4MkCwUl0+EtivS+aF8ZfIDVaC6CZIyvLatq847rr252rQYkItdqSYNx
|
||||
9fK1TFiPsJ6kW8IlvhEYtS8z/tN5DhYV+FOlKQXMhdZlc7HMxU8ZSSN6L/C9nTQV
|
||||
HBUhgH2kyG7GFL3BxU+PjiJGXjAiqtFHfQcBdF1D3lg/jxlgXSAGmGSw7f2D4G0R
|
||||
xxBjodBXT2hQ75syqZIdCp57LR/SCeaoUaNaX4gCsiWd/jvk5EERmDCKMOHAnVC7
|
||||
5If1BWjTdOmdeDOOPo9UP68KX7XlIpJkwb4hIg0gUW9F7WPnBO8TamZu6pjK5HKl
|
||||
zaENeuANAgMBAAECggEBAJBsEiVprNWvEKa9QBw+siAwqvIF/G59UFO27u8br1Zo
|
||||
hVES6mZud9KczALtyK9YU+iWHxVi/idBQZmDqmtRx2ujcopYgCMp6KQfwxlpDkrS
|
||||
GJM3Zvw3yjSpHuVln1IBsCxCt4X5ewr9Wb7Xt12lXMh8eT2XL/uGRvzLD2AV6g8I
|
||||
G71NFJ/UwAlsnCvmyClNU0Ty2Nub0G+5qlaNx5DuoFxgBU8AfAOGWGgM8Buseqsq
|
||||
2OOXgDf6McfPg7XM+sACyhzbxjKdt9oWOOSDzm7GfFwfikfbL2evU0kJW9CKvrDq
|
||||
XYLm6YK8pvi6YSsLyz1z8bt1eRnYN4lf1iGpfvoSrwECgYEA6FXc/Qnhr9DL7zH7
|
||||
+lO4dGhgHbdEjSDUys7ZhoKqhc45pVlYLaDKws9n+mBEYTlpmWbrHrhdafUjZ/VI
|
||||
9sPnhvAyhxXXkdy3m1ZVrSX1D0YnWaKwre+Wv6cS2EhS7Gj0MYca+ri82K3g7fa7
|
||||
i8j7qh7t12gq7riWs53B0azoUusCgYEA3Rq9HpCIFX3x5wJxfiMayhYGGLLc9KqL
|
||||
qoKJVk29tc7mr5uC39Pa1liMR30OIzNXrsibHx8WCYxVtlXyfPt8f5prB4JlPS11
|
||||
we4WC9vNbHf2g/Srx/LlUfnI8sDMcaDHIsqF3vhXFZcT9+a+k0qAgMo+ccP2c7Oy
|
||||
TtPx7cBYqucCgYEApVKD36Kqb1rZ4qjkrmnodRzYWAzSwMG96VprOuW7xV7Lcjcz
|
||||
IbSq0xiW2nip76zU0Y2EfOWfwwfmW9EUTFN2anR839bRAD/YfrZeXMkHqgi3c3bq
|
||||
1boIwPN322MLbqH4MU38CrBt4JlJ1sqdBYjMW2+Kup6q/hdnVQRKqJKq9mUCgYBw
|
||||
89/5ZUyf7h9OLGleTwC4jFfA9l76fsWq7dTLShvIbVJcE83gGpKJPeMsAi7evLPm
|
||||
joTweSkA57hB1dZzEuafKXvT8kFV54to7wBEPp3K893zu2KmWufb4QdPPD81LTWO
|
||||
CHgrWCLk3LFOy4pAJKdRJACSjdGxefN1YcEN/F1PsQKBgGuwRgSieqhtjAI4IFTQ
|
||||
FqTYLON0Om1A6LSGNNib59R78/f/74D2qtE70GugfEYQEK92sXXyybHBveT/jIBv
|
||||
nz1qGxBK0PAgJurEslwLIGybPkO1M2VxOXpXqhyjcuurCv5hr0e1KkrTaNfsaDpn
|
||||
vcaZwqWYDHMAQ3gaREpRNp/y
|
||||
-----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)下载
|
||||
BIN
codes/agent/game/api/payment/wechat/cert/1399351902.zip
Normal file
BIN
codes/agent/game/api/payment/wechat/cert/1399351902.zip
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEYzCCA8ygAwIBAgIEAdibtDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xODAzMjcwMTM1MjZa
|
||||
Fw0yODAzMjQwMTM1MjZaMIGSMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxJzAlBgNVBAMUHuaxn+ilv+Wkqeebm+e9kee7nOaciemZkOWFrOWP
|
||||
uDERMA8GA1UEBBMIMTUxODk1NTQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQC7Czq0IV1MdUywAltpzJr9hiDoK3lnqo1VP+oU7rP0D7jC6EzcCjx8J9sL
|
||||
ukF+AAJVypYvK8seSXgKS5+x2LL0JbBQtvGJLYy5MM9t0w4xwhT6MV7xO1CkTNdJ
|
||||
gBsS9H+bU66WNWh4mkDmdVoA02bCYErkzQ0JDwr6GN8WZp4j2TNWQ8MHsKFNGRML
|
||||
sGAJwP7DVezy9Id503hTDHVn9naw13JjGXI6J20WUiBmeyxDO538Vgy2psrJCKM5
|
||||
jOHjRWnKnGoi7bUpu2xjcWgib5fjV3dFTyjqRoH0ciM+uc96z9Amk8WEXY0sRM1l
|
||||
PwZzgeB998pZQOcYjlMpAhXbogZNAgMBAAGjggFGMIIBQjAJBgNVHRMEAjAAMCwG
|
||||
CWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAdBgNV
|
||||
HQ4EFgQUWv5LtuMGBrWRp0fqeygAYwx5Pt8wgb8GA1UdIwSBtzCBtIAUPgUm9iJi
|
||||
tBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlH
|
||||
dWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQww
|
||||
CgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0BCQEW
|
||||
EG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAwFgYD
|
||||
VR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAvSZI4FwJ29hQ
|
||||
2tL7iS3gLhB3K0exK9lQfBQ6JQAfoFmvXQUtA23H41AEKFjt/INB0DL7JhEMEa9H
|
||||
aykFFO+qrjzut6HU25mFcVSsfTC5F6mtf/K5KPTRw6X5QQHNBazYH3Q4IiPJWAMX
|
||||
gc3OOYfC21kUXyC4KlE4gpfwcKsZcLc=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC7Czq0IV1MdUyw
|
||||
AltpzJr9hiDoK3lnqo1VP+oU7rP0D7jC6EzcCjx8J9sLukF+AAJVypYvK8seSXgK
|
||||
S5+x2LL0JbBQtvGJLYy5MM9t0w4xwhT6MV7xO1CkTNdJgBsS9H+bU66WNWh4mkDm
|
||||
dVoA02bCYErkzQ0JDwr6GN8WZp4j2TNWQ8MHsKFNGRMLsGAJwP7DVezy9Id503hT
|
||||
DHVn9naw13JjGXI6J20WUiBmeyxDO538Vgy2psrJCKM5jOHjRWnKnGoi7bUpu2xj
|
||||
cWgib5fjV3dFTyjqRoH0ciM+uc96z9Amk8WEXY0sRM1lPwZzgeB998pZQOcYjlMp
|
||||
AhXbogZNAgMBAAECggEBAJrA5LYKcNYEqwlpOdbkWUvvQKS264Cw5LSm5/aftLX2
|
||||
mAhzCLx5n6edlicy2GL2gPgYYH/wvOJ3KOFjxmHwB8fmsuVlJ5w22pqSXtzf5XuX
|
||||
t6F1Xbc7OzJk/S6r1jqtnjKWXvmagLBf99h1OZ07S2cBIpYBbYqULqHUGCfBiY/g
|
||||
BoEvZvA3ViK4W0APQNCi2GEHbCkLewBFyquuBSw1frefjFa0HKdR/v/XRaZx2OpS
|
||||
uPrxK7nwwHl4PdcSp7R/vUBGImIx8j9ecFgItq8spaaa1oGBxpgYpxLNFZVBRr+b
|
||||
keaD87Ywmdge8C6Xgv6Dj2FK2cxl1zadYhyHBqlCdOECgYEA72VIZl7UHrwbBJ3/
|
||||
5Ylvy2ww9LSz1nj8KVnv7Mqq5uxYo9g6NcPtHC8p4y9CNb2I2d9H125hwIzCUJ3o
|
||||
hdFM4jQTM740ovrK9xfkuOZQGpMryacxTa5LXA7Le+zQLmjD9tCS0RLKjP1IxMIJ
|
||||
r+jbq3LEbW8hkHhYYkfE06Y1RQkCgYEAyARi+n9QKPKMw/oq59rvAg+HX6oe4xjK
|
||||
+0ltDh7lFlw3SiJNxKwhw5jOjoknEo5jGS61H+KWBEy/mvIFAmASf2a9sz2PBE5e
|
||||
vjoGJjcnmfcXtPGBsjA7weiO+/ON87nRo2tAAYj1AkRUjQhqFL3TLXPjbo6A8BGd
|
||||
7ENMgxdlrCUCgYBzvl5g0Fxyd7QAaXu9uNNKYQbSaUPB4EDapVcw/1PdzkuU/Ag4
|
||||
0n+jbtIruz+hx/+Qhzmu2Pl+JRAV9iLkACvR+ieGjuHYIrVa/jxhgUkdcCZtmt5l
|
||||
lm1tFuIfCoIkzhZhELrLRvCTdipmpwIUANukaxq5Zk+uD+F7swNg6S08MQKBgQCY
|
||||
xpD7mQcXX7yZbJodIqLwxf+22HBjMerI6Zq88Gg3HhS1MWKJWJkpl6wePzBzAgM7
|
||||
luuOATpo6l5n8XhWCh/W5Bj9sYVt2paPYi6UPginl46qDNXtzt22DPY6CBxjD4nK
|
||||
8v6erYfHRX33g3fTg/KrgxsytPJTbIFdl0H314U3aQKBgA1T6PFKA14VI6sgjxuT
|
||||
I+j5JSnu0BnRecsWiDdT5oi+UEkQ0QIvBOzpLe5SQnqO9LMSo9mRW/UjRCUvFWjQ
|
||||
XQBcdmWX01bb5bAs1K9dePuMR8QLuRBDTsAYfx3GttC9QgwAHdNVR9NvkuVeb8Ar
|
||||
Y5QC0ufmlFpBTHzYmdMuS/VF
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -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)下载
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEazCCA9SgAwIBAgIDdCZUMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
|
||||
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
|
||||
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
|
||||
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MTIzMDA3NTA1M1oX
|
||||
DTI2MTIyODA3NTA1M1owgZsxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
|
||||
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
|
||||
EwVNTVBheTEwMC4GA1UEAxQn5rGf6KW/5riU5LmQ5a62572R57uc56eR5oqA5pyJ
|
||||
6ZmQ5YWs5Y+4MREwDwYDVQQEEwgxNzY2NTIwMjCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBAKHpH7LqOvYdWFl3mLUc7gG8/9E90d0gN83xhWvegah7VT3s
|
||||
oOJoygX4599jcgVFZXVWiyEzqTRZZQ7f5FeDSb9ZynBg6fanYb1C/FqswN3pYJWy
|
||||
d+a+Op2XsT7QoSK+4Eev/vqP6OX9xt3Kys4tu2190XvScI2Gsk5So31zkrIkHX3W
|
||||
HLCa+J/cI2cbcR4pSsJRBGgvLNxbfes98xUPqI9j9Ui0KT/5+4qgmvKbXuwvmOYQ
|
||||
h9m62+K4H+33V/ANetNouIJWh92LSorlDzRtazZSMth4utTw9WRy0mVRu7qd6s7A
|
||||
aMv+uslrrRnzIbjf0cZDUAXRn0U3POwIkaIgpp8CAwEAAaOCAUYwggFCMAkGA1Ud
|
||||
EwQCMAAwLAYJYIZIAYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNh
|
||||
dGUiMB0GA1UdDgQWBBTHAqvjBd+m7degGIxTjZBKj22lkzCBvwYDVR0jBIG3MIG0
|
||||
gBQ+BSb2ImK0FVuIzWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQ
|
||||
BgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1Rl
|
||||
bmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqG
|
||||
SIb3DQEJARYQbW1wYXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQE
|
||||
AwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQAa
|
||||
caf82+6e5AgCTOyP6Ozq1+ao1nWVjzgMy4yRKmsUUczf/v+rUdz8U7UFZ1ICN3NY
|
||||
bs57gJ/ZLSHtCk/L6AkvBwY+ri0iC2oD88AiMjdycgyjHHoheEYSV6T3qLwkMqZY
|
||||
FCXJMDqIgoakpVv+l+du1kJVoOwAY1M9SHN791z5nw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCh6R+y6jr2HVhZ
|
||||
d5i1HO4BvP/RPdHdIDfN8YVr3oGoe1U97KDiaMoF+OffY3IFRWV1VoshM6k0WWUO
|
||||
3+RXg0m/WcpwYOn2p2G9QvxarMDd6WCVsnfmvjqdl7E+0KEivuBHr/76j+jl/cbd
|
||||
ysrOLbttfdF70nCNhrJOUqN9c5KyJB191hywmvif3CNnG3EeKUrCUQRoLyzcW33r
|
||||
PfMVD6iPY/VItCk/+fuKoJrym17sL5jmEIfZutviuB/t91fwDXrTaLiCVofdi0qK
|
||||
5Q80bWs2UjLYeLrU8PVkctJlUbu6nerOwGjL/rrJa60Z8yG439HGQ1AF0Z9FNzzs
|
||||
CJGiIKafAgMBAAECggEAahlcPmAjlxgPx0EJ/tUgWl9BvBoopiDwsLHuXouGp6N6
|
||||
boPbwcItcNB1EfwWwcGCBOxba7xwyu8xvBeXiIluEEiE0jOP3aQ99kopGDpQgJro
|
||||
QfCbhcduncrDyYfpr90pF5ELI6KeWeh9IuY7E/T/93YVinCSdQupWI3quNC9dqIN
|
||||
EgYKDctBFGe+f1KtzcJfUWDeD8MWTOqhDnt77gxekFxli4O//ARDRN6i1mZjU/Bo
|
||||
GH02DsdK/rA12qGhrfJP6sfyNoBlTBIurUT7VG9AIT2UknG+uH4qLGCEMU09cKzg
|
||||
F1cH+6qsI6s03tfQK8voYtGvK4fg1KXrolaQgL4mQQKBgQDQhOjUdpfsz1KyRZKd
|
||||
s41aovGi1dkzZS4AXWbIGW1ovB7IdbGd/NZq7N194SbG5+sn7JFED6statvV/gwa
|
||||
7XviGWAWh4AWnQT3A+EH6x0izRLs3iQB3x6JnL6tDdA3XfcwvSAUjicHP+HTfJPK
|
||||
6zqY5Mihz07r6lt6tg01DYOnjwKBgQDGx0oI0JQML6tLfK7EReBmOQ0lmbh5Jkst
|
||||
Hzm2V2Uuc11FGQ47AU3wlMkWk5OCURgOQWoZnxYlAhy2OB8MnAQku0ZAWSwjeHEW
|
||||
vZu+XQFVFMs23FVb/dD5eB7eJSCNKSugzhHgs6nNj5MreHU+3cmJDTJThwBU+kY1
|
||||
QZGe8TUH8QKBgQCBFBVxGCy5yik98/Vrq+9v0PhVvZ1jxFlynl72tU7WC8Xef4TA
|
||||
8PfmXtRJjSvM61nVcAsIn85uIf0N/eKOdL5AW0bxC1YOKYseQgd2OGPj3CDAAk81
|
||||
3WFw/FfIlolzDLbtM9X9A3ZDdZccrLxsW6r9ZHqSN9t6DKwuTS3lzoTWHwKBgBdd
|
||||
HzeQBIa2J6UUv5n0OJ7rP79WpRcgSB/Cls720L638pOHkWOgEKAhbM1JhUIA9Bng
|
||||
2G6wgzLQX72PNR8PS3Fhza0MjiKRKoGowaCLX/e3HPeSyDmqyKA53S7xIDVXTHh3
|
||||
ICTQGTo/EOZAH0/HU8PXGD43FPPoAs6JqWsMINaRAoGAJA7PlrCzd4rbm0IOFqj+
|
||||
rsF16/NqS3GN34j74JWvTxkDew7sa2hmsndZAVsn+6l7PT3pxzRiq0lDFt8NiciO
|
||||
oc4dTRcvKFQMcfClYlE9/PckFKZpCl/XDfNirwEJilTY4E5kLWG1Jsrf7k5F/Q99
|
||||
AY3pNzVB+L03PIBLjvAdBXI=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
欢迎使用微信支付!
|
||||
微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书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证书(rootca.pem)
|
||||
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性
|
||||
该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
|
||||
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
|
||||
BIN
codes/agent/game/api/payment/wechat/cert/1435214302.zip
Normal file
BIN
codes/agent/game/api/payment/wechat/cert/1435214302.zip
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEbzCCA9igAwIBAgIEAWDOITANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA3MjUwODMwMDZa
|
||||
Fw0yNzA3MjMwODMwMDZaMIGeMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxMzAxBgNVBAMUKuaxn+ilv+Wkqeebm+S6keeUn+enkeaKgOmbhuWb
|
||||
ouaciemZkOWFrOWPuDERMA8GA1UEBBMIMTkwMzMxNzYwggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQC5zkWrOL620z9w7lU+JvbnFQ/6Wee+6Wh/wwM1y3q5
|
||||
nTM6C8ipfEnPjLXaEx57INAxk/ncjCUtHqJchh5fsBOmV/ZaUgFvFZmp3LuVqmYr
|
||||
qN4YcgljW5ClR+V6skphGrJO6TAzgEhROqZ9b9aUfoINhVgeAF6X+Wehm5RA+bD3
|
||||
LzT36TvioRfiJCAYNLXCjlYi+L4SR5cTQfUAp9qdGHMrMKiE8m3oq+lcTOiQOQp4
|
||||
lD6/LBe5MvBfDYoOuYKseMX7kbTH6gD+nbPdEnqTruxZmLLQv+wflhHb6KOd++ws
|
||||
mm3hPyydZ+GKhXJnP5pGnA81M+AeY2llVe19YUrkE+1LAgMBAAGjggFGMIIBQjAJ
|
||||
BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRp
|
||||
ZmljYXRlIjAdBgNVHQ4EFgQU/IkmV0gg2CEi4kb54RrA4MkdQ8cwgb8GA1UdIwSB
|
||||
tzCBtIAUPgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNO
|
||||
MRIwEAYDVQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQK
|
||||
EwdUZW5jZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAd
|
||||
BgkqhkiG9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8B
|
||||
Af8EBAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQAD
|
||||
gYEAJXxC7IF6E8P7rRAiTGxmKY735aS1/AiKBURdO4tJDWv4vLgFSZX8Fy7VrdDg
|
||||
DTLOl+P9/qSdNhm+L6S9PtCSMQWpc3FdsE5s1wS112WHvswGHXrvHPnG3p30AUiv
|
||||
uYJH/hYLKUnsH2agL1lFlHWxpwjS27Lad1qfSHqB2YjxqoQ=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5zkWrOL620z9w
|
||||
7lU+JvbnFQ/6Wee+6Wh/wwM1y3q5nTM6C8ipfEnPjLXaEx57INAxk/ncjCUtHqJc
|
||||
hh5fsBOmV/ZaUgFvFZmp3LuVqmYrqN4YcgljW5ClR+V6skphGrJO6TAzgEhROqZ9
|
||||
b9aUfoINhVgeAF6X+Wehm5RA+bD3LzT36TvioRfiJCAYNLXCjlYi+L4SR5cTQfUA
|
||||
p9qdGHMrMKiE8m3oq+lcTOiQOQp4lD6/LBe5MvBfDYoOuYKseMX7kbTH6gD+nbPd
|
||||
EnqTruxZmLLQv+wflhHb6KOd++wsmm3hPyydZ+GKhXJnP5pGnA81M+AeY2llVe19
|
||||
YUrkE+1LAgMBAAECggEAG6jVPjPoUBcKbqlMD0CFqMi95CrWENl2MO6635s23cLF
|
||||
CXMPoAtcgYUU3S3Tb8jmtTquC2LhdeIFkXh1tRDlG/IkPjXO+NZiVaMCWblQFFfD
|
||||
GCiBtUTAN5qIUsePwvzSZmTYRBJosY7lke7AJsLeYVzkTTMI4d7Cyo/6deG1slYX
|
||||
bq3FBx+Zd7SpVUyvzNZOrduqwXZN9Du+YuApy7MtMyLDUxkg9alHkVn9XWut3+yo
|
||||
u4xGZkrYgw21gi4mGrhBW54HxbaI0RogFd82BudchkMke2/8Q9xM8MYeiiA0ewrP
|
||||
uOGa9HOewQxv1epnSPicfsEk6/NDqcUj1WEr7VOUQQKBgQDw+I6k5fFYIFRNRuSf
|
||||
Qm/Uoz8k6x9XD38ZAUuQv4YYKykdBIJJrRLuBOQzrNU3YLXCrMiuf/Sdbu6V8JH9
|
||||
xZsY3SugB3Wzh96OxXvot7nviDT2fsrzwdw/2LRMipy2ICBEBT+ASqMrigb5GLwW
|
||||
GAoTR5bZEUVvaCYcs4x9HQ2ruQKBgQDFZOy0Ca9rLTxuUYWxsqez4DpDr15s3xXQ
|
||||
l81QYG7ABFV3Z8Kjr/DNTKmAUXd4hbJiPvhnlPJdEcFQRsiFnR8QoAqtDpb6cv7u
|
||||
F7YqasXFJV3+5xgj0vPXwdagwHxSaHEQd4QjZm76hiF0hY89jz36DjaYFCUE4Lik
|
||||
iJ/DoriLIwKBgQC9LbX2+VsHH6JvZLe53FOlcV/yYPCizdSvUdf8VJA2yzOkx1Rt
|
||||
+QWCfa6WbxqZNkCcDEAk1um46009w7cprwg7de943EJoZsOv/JRxuEOuLJW/6vz0
|
||||
b361VTD/YlbzmLccD66xzmbZmKwuxV9sTQUj67EeyzNi6jX5lHA4DSYdaQKBgA1X
|
||||
yyBIX1ExV5plbFIcr3VbPNUCb7GQSts0x64dNp9IK7bMjr2d0PsvqW2BFEBTWUGG
|
||||
3Ce0S8W6w4R3pGpTupvXFaGpEM+RImZZt/iaCxBOfFIUsO8K/WyiL63iFQVFBg+E
|
||||
5Ku36tyIYI6N0KbqndffShVxlycDQbftfE8vGqZdAoGBANRCo20aqSnwdrRqNbaR
|
||||
fD0BwfvxYqaoA9ODojsD+NtPtaamTcZXGEK5ySmcM4Vibf7bx7K9Q9lCm2BVKBe6
|
||||
Tli63g+PpBMzPFfW5Wo5ip3MU7tYiB5XLoEaUtS3xfkR/sue3XrgDUP1ZTh7qlRI
|
||||
+NoCBl7bAQVmf1CV46W24PhI
|
||||
-----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)下载
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEaTCCA9KgAwIBAgIEATvOWzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA2MDgwOTIwMzda
|
||||
Fw0yNzA2MDYwOTIwMzdaMIGYMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxLTArBgNVBAMUJOaxn+ilv+mBk+aji+e9kee7nOenkeaKgOaciemZ
|
||||
kOWFrOWPuDERMA8GA1UEBBMIMzA4MjM1NzAwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQDvZswXWvmNdJskZQzKM87hmyyiq+4gqWWllBndpEgnvxpFEIP0
|
||||
clr+Rt5EUEqw/MDa4lDw6uE5jUmdKNpthhx91r/C7YKUDXybXfz0X/N3VWI0dSQk
|
||||
KwI5nLj7tUskqapWTCXqRP7yOcEs5Yeh1AlpNtJEiCNGuyq+YQ2+r2sYR/xUCdcB
|
||||
Rohio+Y6EZKycQydWR/KYCfMN/fiBlHefaNMFeMqWy7hCG+XaLTHdL/CBH2GJjYn
|
||||
UiWFQPlm50z4L6UatOwjZ4aa71UMlBLq6km/Q6a9XyckQp6yxbDqj7dkCWpgYCrk
|
||||
ocyoIqew6Anh0GhaSic2IrJuhvIsVu/Qw5FTAgMBAAGjggFGMIIBQjAJBgNVHRME
|
||||
AjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRl
|
||||
IjAdBgNVHQ4EFgQUCwNohxijGGjT5ggasz84R3zfVxEwgb8GA1UdIwSBtzCBtIAU
|
||||
PgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYD
|
||||
VQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5j
|
||||
ZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG
|
||||
9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMC
|
||||
BsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAEs73
|
||||
7x81NnfpHPi4Bo2IvGkwQsfmRdCT2LGk3cHwdHBjpeaEbNmtfrmwf6jfMHk7FL30
|
||||
Uix3RkhUM2hRerHF9qQnwKTziSZGrmeIDMjH1PbsKvLFgzDbI4BhM6zCQvdAr4j7
|
||||
bHs3ERujqhwO00NOuFxDhLYATF7WpfUlKlstwfE=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDvZswXWvmNdJsk
|
||||
ZQzKM87hmyyiq+4gqWWllBndpEgnvxpFEIP0clr+Rt5EUEqw/MDa4lDw6uE5jUmd
|
||||
KNpthhx91r/C7YKUDXybXfz0X/N3VWI0dSQkKwI5nLj7tUskqapWTCXqRP7yOcEs
|
||||
5Yeh1AlpNtJEiCNGuyq+YQ2+r2sYR/xUCdcBRohio+Y6EZKycQydWR/KYCfMN/fi
|
||||
BlHefaNMFeMqWy7hCG+XaLTHdL/CBH2GJjYnUiWFQPlm50z4L6UatOwjZ4aa71UM
|
||||
lBLq6km/Q6a9XyckQp6yxbDqj7dkCWpgYCrkocyoIqew6Anh0GhaSic2IrJuhvIs
|
||||
Vu/Qw5FTAgMBAAECggEAOY8gsNjZuU344yY8jf0o14tkjvQBe+7elpHmKikOhCfp
|
||||
XAOdhk9cW1iUph4b5zPN9pKFXXdLkXfL5DJnWf/tp7/TOT27sHcRp5VQdT0An4dy
|
||||
5iPn/Z4tmcZ5n2M2XulAICGM2CegmIKUVIQXOSxu2tIoefu1Z5MmssFI+bjZaeul
|
||||
zDVbA2KBxwA5nuXw4jtVgIX/Pgwsae5MyAXZ0O2p5Wy3y7FY/TPY6QBtNtvbfcit
|
||||
JPZWlHzn8jXHJsaPF4pX69W7MeW3bk8OVF8hgp8MFLr9BpOaezt75K84R3KyjbJu
|
||||
lgYkSwIAGuUsIVtThnrB6r3swd+jo6gOi1gETIQk+QKBgQD7AkRLMs5KPUOQb3wM
|
||||
Njoxkkk6NhW1A1wXtba2jGkUIb1IpdKGK2SySyDbqTAc+JDhOpYdbNpiOiKFT/n6
|
||||
v5zHGGLtN/9hstZLoVN0R1xy2OjQam3rAigRJFkujvURNX9CX0Gf/Me6KJmHlJXB
|
||||
10LBIHMVigsiMpCkV0ukR212hQKBgQD0KXHbA32Z/zJIIDYpFHFZJxyz+irbccft
|
||||
6Z/BKbMIadg8BRu2qBOD5pIPS+dwWLqcJ6IroE17Va8PVaDAnbPfhGGTb+aFtE++
|
||||
1uVY7ZkBfHUYjYSTYYPtZKbRwtYYkZio9rF9QYd0qaixREfvJGW2V/KqBXFVqO8a
|
||||
fGi0E1yL9wKBgB+yhZVJcSuG2QVgTrXsEyU3Z+/l7I/TQMnttIkQ6iQUrqaB6jfv
|
||||
OuQZAKk8kErYSNNoZpSIrntBBCL5moPDtrSdq8BxFdrsjos2cCd6633FToEjL4ZB
|
||||
23VutaRfgSsPKmbjSJI/halIfzrT1KWJ3XAt/Np3eDh1Ujaun2q7amNRAoGAbNPI
|
||||
PsFoi2pW5BUPbvIAr6ciQQohbhxh66Y1IajPdtGOovn350s1H5Z2xcCkUMwLqSx1
|
||||
ORLDVlTTqXcWJqRkFx1vTIMU8cVzwfEQ2rlUeHgbzSzOyc4uOnKhdF9uhBbpP25t
|
||||
oBHEKXixiwmPMoU7nLHIpIW2hWK96EVJefIjTvMCgYEAijO14yXlv1LrF+Do8OZU
|
||||
+5VE9R9mYjeDzGMhNsoaAH/Xzx3BCKSxjN+yz86SdVnF+O+NBzUJUMm5+RIjAYrK
|
||||
4AQeqjZ3ftRyrA3x73M7puw7+sC+j+DiqH8Ka7M8GQBBAfx4/4M+P6bQYTJl0r7C
|
||||
nmwWTUwsbJSDG0wsnNb+NWY=
|
||||
-----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)下载
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEZjCCA8+gAwIBAgIEAWfCjTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzA5MDUwNDEwMjla
|
||||
Fw0yNzA5MDMwNDEwMjlaMIGVMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxKjAoBgNVBAMUIeWNl+aYjOW4guaWh+W8uuenkeaKgOaciemZkOWF
|
||||
rOWPuDERMA8GA1UEBBMINDkxODkxOTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQC6flKweU34nNrTRaqQZHa4zJLyC8EKcM5hcwa5AJRYwMg4EI+/bdIY
|
||||
JQPxH1ZNYpI5NOUNwMNyDSeaPLqZ1vcXZ2ODAqvb5sxJhLrqunkz7mnnqmF72N2P
|
||||
LuZ9w67n9cbtF2WaqBY7vHmgC9WecG4HRTAGufUeyAKeq4oxF39t/mW9axeRk4ek
|
||||
cLTIKpqjfj9RUdHrcLs15B5ucw5d9XV4N+b6xWV77WKSQUQvR7gIL9HKLBRbxSwu
|
||||
J+NP/sBCTRxapJ90H2ZqBQO6B/uOVTFjRVlPqbMFbM+iLGULUqxuMc+rGnHIlhmo
|
||||
UbPtjX688aQjFaj4QH2D9b/cfYRc/CiRAgMBAAGjggFGMIIBQjAJBgNVHRMEAjAA
|
||||
MCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAd
|
||||
BgNVHQ4EFgQUMJV6/7fryLEMxA4j3nrT+vFxW+Ewgb8GA1UdIwSBtzCBtIAUPgUm
|
||||
9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQI
|
||||
EwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50
|
||||
MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0B
|
||||
CQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAw
|
||||
FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAZ8Y0YT+X
|
||||
XGxBVqCieWA4Z4nWXPHEjbW/eokx9US1nVvAlUC4+oNrk59sBwctaEDj2Lkiq7gt
|
||||
rSp05z0V+VSb21jbnFx4yq7NSTyZeWODaBF5Vql/GX/r6eY9mDtq5YoIfU/gcBh8
|
||||
5/CPh0jHitr/gZZIDGvZUyOkDsTfDSPVaJQ=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6flKweU34nNrT
|
||||
RaqQZHa4zJLyC8EKcM5hcwa5AJRYwMg4EI+/bdIYJQPxH1ZNYpI5NOUNwMNyDSea
|
||||
PLqZ1vcXZ2ODAqvb5sxJhLrqunkz7mnnqmF72N2PLuZ9w67n9cbtF2WaqBY7vHmg
|
||||
C9WecG4HRTAGufUeyAKeq4oxF39t/mW9axeRk4ekcLTIKpqjfj9RUdHrcLs15B5u
|
||||
cw5d9XV4N+b6xWV77WKSQUQvR7gIL9HKLBRbxSwuJ+NP/sBCTRxapJ90H2ZqBQO6
|
||||
B/uOVTFjRVlPqbMFbM+iLGULUqxuMc+rGnHIlhmoUbPtjX688aQjFaj4QH2D9b/c
|
||||
fYRc/CiRAgMBAAECggEAfGS6PyAKlCP8CiRT6tA4KHe8JFsWviIUZwfUmh361WBx
|
||||
rIPPfj6Afr5h7LmcVS3EnwfbKNtFApQnsEeFqAus8R1zUPW9MIa4COnRy7PqGGuU
|
||||
lIQfVf6HenQsJgMabXqQ36BVk10+x0WmUszSBkaz/YF20WXETG3Y4YFGQgyMYQ7F
|
||||
xehNqUMJ8knGykTe0NoYlpV7DsGvT9QLWPmv3h54UVMoUdMEeHiDDORIrOzhEmCM
|
||||
/py/IMLs8e93n920e3+BFBjO8e3PciNjn+D6mJzqj9Am3mPP/6AZJ1xK/pfMLKRr
|
||||
Qx86QSQXKfv87sSnUSeGP1J/RWjieRGJdPvQZ6rqyQKBgQDdgprKfS6q9eUWKNKv
|
||||
L2BeU0gZ8uQeCft2b50O3P/VzXYPQUsfy3NbI/I3vGW5exPuhVhEcFtwSObtTOps
|
||||
HiF7ycdbQbTxGaUwJfw3HPov709aNjSFdLs57S7w23NATgKrR3RkJWZiejABn+Dq
|
||||
Rp5AxbToDa3+XazwjD5RnqvZBwKBgQDXh/Oj5S1EeF1xUXgTbhFWi/I2uN01DN/d
|
||||
bwAce0nkfafL0aH20gb34VRSYIIsp+vJyZENb72P3/sQOn7CEVY44KOHhxq/JltR
|
||||
jOvWGI3gvFcHz3RGGy6BdZH0WgV4xcucI/cGgJvs7avIDJEaF1gcncfU7vmpOJpK
|
||||
YqPG6NWDpwKBgQDJoEZRplzCVQzvfL05pQAtG9V3eTXXefKgvbvSeauN63VZMW+2
|
||||
QzR/c1rZDO3zRWrBJDNSKIuyy0kYG3kObObBjMuf71FKXLOV/h1z9TZuR4CNduWb
|
||||
zMNXWOPvbXGcyOV5DpONTNXDMcFc2TCbTyhhgRTIXRtRe+cdFirrlGiMJQKBgCdo
|
||||
jUznZ4qAc513pvvugS8Q8Z292XyMuRYU6LFMfatQqnCjCPlHV8zVH4TcbpDZt0wz
|
||||
FdmeF8wJyS8jcu/rGZfWwy/RrTtMOSBFIw4HeVGhPkyISxtSdwNmyuQh3aRCjkMj
|
||||
dFR1CY2du24dlh5uLEc3NkWh2HZvig6V0JpbEkc7AoGAJG++n85sHGFInWX2kfhn
|
||||
WzewdGPA1EOTsp0cBqhicqwsjkmBREnR8XwNi8iwnQnVOY2/ejmVXLBufK0sBXKf
|
||||
rzJ4UIPpZFa86eSbTZC9dKXl5dH1Y1iqoaqE5pybhz5/K5yIlwJyN/mjoBdG928k
|
||||
bvhdWlP6Od9fw/UFGd2Q6TA=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
欢迎使用微信支付!
|
||||
微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书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证书(rootca.pem)
|
||||
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性
|
||||
该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
|
||||
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
|
||||
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEZjCCA8+gAwIBAgIEAXc9yTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
|
||||
Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV
|
||||
BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf
|
||||
MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzExMTAxMDAwMzZa
|
||||
Fw0yNzExMDgxMDAwMzZaMIGVMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk
|
||||
b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE
|
||||
CxMFTU1QYXkxKjAoBgNVBAMUIeaxn+ilv+eggeWuouihl+enkeaKgOaciemZkOWF
|
||||
rOWPuDERMA8GA1UEBBMINjUyMTk5MDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQDInMTnbvdJg6CXRbfiFT/lokX/aN7tUVXvlckjQdWegHQKAckOalZF
|
||||
T3YuYRDmdOhLQIb7sc1VdS5Tjw8BoNbRHo5WGNQuHjigVdWv8nRRzdrEXTEX0neM
|
||||
7R0mrL7C5T4Nj5e6f4EhD8jVkhRisWiY9yecLtawohDrXrF61Sea356rDXl+00g1
|
||||
YcELw8NaKOzEJ3QEdQh+23cBwasXPnCI/ntQOWLBfJdGarD3zyAcC7D6exr5/8QY
|
||||
AGvFaBmJs9SarivynDMaALh/q98A9LR0MeQA9Tj8/8ABl1T+i53EP9ftq1xSwpmX
|
||||
qFQRzAdR9a66OTJ/oq+eDueiqz64UGItAgMBAAGjggFGMIIBQjAJBgNVHRMEAjAA
|
||||
MCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAd
|
||||
BgNVHQ4EFgQU23fb4qrlRqBzgX0/TPfPHzEh4Iwwgb8GA1UdIwSBtzCBtIAUPgUm
|
||||
9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYDVQQI
|
||||
EwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50
|
||||
MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG9w0B
|
||||
CQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMCBsAw
|
||||
FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAIH/KP1Q9
|
||||
/XpV8OAhN3xUJl62KezCjoAScTsLIAF6T0FA68kELRP+YBDV7cxvmhVO2+eLHBJ0
|
||||
GZc1UUFmibEuW+uSrqvoVp6WL11X+XGlGETeMajjdzU0t8DDFInlmBgPjO9Y+dhC
|
||||
L8yws7GjNcTIuRMgIDHYCluRSdOHwpQbS6Q=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDInMTnbvdJg6CX
|
||||
RbfiFT/lokX/aN7tUVXvlckjQdWegHQKAckOalZFT3YuYRDmdOhLQIb7sc1VdS5T
|
||||
jw8BoNbRHo5WGNQuHjigVdWv8nRRzdrEXTEX0neM7R0mrL7C5T4Nj5e6f4EhD8jV
|
||||
khRisWiY9yecLtawohDrXrF61Sea356rDXl+00g1YcELw8NaKOzEJ3QEdQh+23cB
|
||||
wasXPnCI/ntQOWLBfJdGarD3zyAcC7D6exr5/8QYAGvFaBmJs9SarivynDMaALh/
|
||||
q98A9LR0MeQA9Tj8/8ABl1T+i53EP9ftq1xSwpmXqFQRzAdR9a66OTJ/oq+eDuei
|
||||
qz64UGItAgMBAAECggEACfXuuOcDlDza3mfxx2HyuD4kZ5gXaYUeVTUEtaFxL9uE
|
||||
53JLP1H8Upitb4QWSLsJRaNAkIK1hUa6NB/oSNZplByGSLQW5OtPOHbKk1/gcqdb
|
||||
82AFLf+fO/oR9nehSSAEwrucdwAZs0CLYj9Mj9HrNZ0f9FtHAaIqYOVkvoqS2tek
|
||||
6DOV8gqGHc5myiFJk058GExbaJaWXfiqCJE325v9aeC1XH8K9Zq0is5dsAQoYhs6
|
||||
ct13vNo+vCVm/5ru72twagbSuJ3ya+Dg/lP5UAk9QtAbEVMKQaOWGUtbO3CICZEr
|
||||
N3/AWKpM3677zgVxL7oWI34vqWyiN7k7gFCHnFW2wQKBgQD/otGvnJC/pjykI+x4
|
||||
GbuH2ytcb99qprs4PtCCKOd6RO9J6/lMrQrSDBovC6kHwV9taSmSuVzsfBZbzyHI
|
||||
cXMY+Z4SdEJNaEb7+sHHkAuEneRnO5ErxkHtvSY9T68grtblIZLK0Lw5EpoZ0D1w
|
||||
aWzfepg0HTKyEZStlTr/D/I4CQKBgQDI5eTD7yAQAc7/mQFUBCjWxCFn6MOkuTSK
|
||||
0cqTs/oMTfZkbxNJKn/DOIMiOgvxyK//HYTvwpqxV+44ekrWVoguN9v1qbnLvv9f
|
||||
HmgnLLy2rXFfE+W8mZD/q7PsMXnf42/PV5Wrb+EfYVl6h/MJrZZaD0xon3bIz2Rq
|
||||
tSpkuRl6BQKBgQCbAOTX8L0sF+ZJOKcXo7K8C77dC9CSYIrA7gWMBrVkxAu77ON7
|
||||
BKm89y2hPRa+5xevxcY5ez/G/O6puIypd3Dswd6BHhFd0k7IVyHMmaECRqLJnarG
|
||||
ui4bs0dOgdSUoq8WvCa/55VZndfmswet857aWwGTB+lHY7WdExF0uvyJ0QKBgA/S
|
||||
28P7D8FzAwTq3knp0fWomSEAGnjdBaBxic08fdN+SIv8m75FlK6hwuJtRAeVURd9
|
||||
Eb14zIpvbJoSN9bOFgfd6ntdFP9RWff6AyYixfJ1ktp0TMIgLmWU9qUB+KGD3ois
|
||||
U2OfelHobw3Rq3j1rUQGtHQBK3ABtd0Zy+8HDVSpAoGBALVz3p85CgntTjXO5Cnt
|
||||
x2K74bRkblPsyhG04aXiqLHMBnLLbSYuXfhVEG2moqnmipG3IJ4CMKGZYA5GyLwr
|
||||
DmMhzaer+pGjN/KLFnV/fHv5HaoA+sKhhNHDB/54yqV8+6es/RbohznMrO0b9Ek9
|
||||
+uOVXgMrOYo1kF+na5mv4+7E
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
||||
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
||||
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
||||
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
||||
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
||||
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
||||
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
||||
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
||||
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
||||
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
||||
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
||||
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
||||
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
||||
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
||||
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
||||
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
欢迎使用微信支付!
|
||||
微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书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证书(rootca.pem)
|
||||
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性
|
||||
该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
|
||||
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
|
||||
678
codes/agent/game/api/payment/wechat/lib/WxPay.Api.php
Normal file
678
codes/agent/game/api/payment/wechat/lib/WxPay.Api.php
Normal file
@@ -0,0 +1,678 @@
|
||||
<?php
|
||||
require_once "WxPay.Exception.php";
|
||||
require_once "WxPay.Config.php";
|
||||
require_once "WxPay.Data.php";
|
||||
//require_once '../log.php';
|
||||
|
||||
//初始化日志
|
||||
//$logHandler= new CLogFileHandler("../../logs/".date('Y-m-d').'.log');
|
||||
//$log = Log::Init($logHandler, 15);
|
||||
|
||||
/**
|
||||
*
|
||||
* 接口访问类,包含所有微信支付API列表的封装,类中方法为static方法,
|
||||
* 每个接口有默认超时时间(除提交被扫支付为10s,上报超时时间为1s外,其他均为6s)
|
||||
* @author widyhu
|
||||
*
|
||||
*/
|
||||
class WxPayApi
|
||||
{
|
||||
/**
|
||||
* 统一下单,WxPayUnifiedOrder中out_trade_no、body、total_fee、trade_type必填
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayUnifiedOrder $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return array 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function unifiedOrder($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsOut_trade_noSet())
|
||||
throw new WxPayException("缺少统一支付接口必填参数out_trade_no!");
|
||||
else if (!$inputObj->IsBodySet())
|
||||
throw new WxPayException("缺少统一支付接口必填参数body!");
|
||||
else if (!$inputObj->IsTotal_feeSet())
|
||||
throw new WxPayException("缺少统一支付接口必填参数total_fee!");
|
||||
else if (!$inputObj->IsTrade_typeSet())
|
||||
throw new WxPayException("缺少统一支付接口必填参数trade_type!");
|
||||
|
||||
//关联参数
|
||||
if ($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet())
|
||||
throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
|
||||
|
||||
if ($inputObj->GetTrade_type() == "NATIVE" && !$inputObj->IsProduct_idSet())
|
||||
throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
|
||||
|
||||
|
||||
// 异步通知url未设置,则使用配置文件中的url
|
||||
if (!$inputObj->IsNotify_urlSet())
|
||||
$inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL); // 异步通知url
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']); // 终端ip
|
||||
//$inputObj->SetSpbill_create_ip("1.1.1.1");
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
// 签名
|
||||
$inputObj->SetSign($wechatInfo);
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
// 提交统一订单返回的数据
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayOrderQuery $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function orderQuery($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/orderquery";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet())
|
||||
throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!");
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond();//请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
|
||||
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 关闭订单,WxPayCloseOrder中out_trade_no必填
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayCloseOrder $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function closeOrder($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/closeorder";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsOut_trade_noSet())
|
||||
{
|
||||
throw new WxPayException("订单查询接口中,out_trade_no必填!");
|
||||
}
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo);//签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且
|
||||
* out_refund_no、total_fee、refund_fee、op_user_id为必填参数
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayRefund $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $weixinInfo
|
||||
* @param int $timeOut
|
||||
* @throws WxPayException
|
||||
* @return array 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function refund($inputObj, $timeOut = 6, $weixinInfo, $dbObj)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
|
||||
// 检测必填参数
|
||||
if (!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet())
|
||||
throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!");
|
||||
else if (!$inputObj->IsOut_refund_noSet())
|
||||
throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!");
|
||||
else if (!$inputObj->IsTotal_feeSet())
|
||||
throw new WxPayException("退款申请接口中,缺少必填参数total_fee!");
|
||||
else if (!$inputObj->IsRefund_feeSet())
|
||||
throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!");
|
||||
else if (!$inputObj->IsOp_user_idSet())
|
||||
throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!");
|
||||
|
||||
$inputObj->SetAppid($weixinInfo["appid"]); // 公众账号ID
|
||||
$inputObj->SetMch_id($weixinInfo["mchid"]); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($weixinInfo);//签名
|
||||
$xml = $inputObj->ToXml();
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, true, $timeOut, $weixinInfo);
|
||||
//Log::DEBUG("退款回调消息:" . $response);
|
||||
$result = WxPayResults::Init($response, $weixinInfo, 1, true, $dbObj);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 查询退款
|
||||
* 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,
|
||||
* 用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
|
||||
* WxPayRefundQuery中out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayRefundQuery $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function refundQuery($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/refundquery";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsOut_refund_noSet() &&
|
||||
!$inputObj->IsOut_trade_noSet() &&
|
||||
!$inputObj->IsTransaction_idSet() &&
|
||||
!$inputObj->IsRefund_idSet()
|
||||
)
|
||||
{
|
||||
throw new WxPayException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!");
|
||||
}
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载对账单,WxPayDownloadBill中bill_date为必填参数
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayDownloadBill $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function downloadBill($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/downloadbill";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsBill_dateSet())
|
||||
{
|
||||
throw new WxPayException("对账单接口中,缺少必填参数bill_date!");
|
||||
}
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
if (substr($response, 0, 5) == "<xml>")
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交被扫支付API
|
||||
* 收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台,
|
||||
* 由商户收银台或者商户后台调用该接口发起支付。
|
||||
* WxPayWxPayMicroPay中body、out_trade_no、total_fee、auth_code参数必填
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayWxPayMicroPay $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function micropay($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/pay/micropay";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsBodySet())
|
||||
throw new WxPayException("提交被扫支付API接口中,缺少必填参数body!");
|
||||
else if (!$inputObj->IsOut_trade_noSet())
|
||||
throw new WxPayException("提交被扫支付API接口中,缺少必填参数out_trade_no!");
|
||||
else if (!$inputObj->IsTotal_feeSet())
|
||||
throw new WxPayException("提交被扫支付API接口中,缺少必填参数total_fee!");
|
||||
else if (!$inputObj->IsAuth_codeSet())
|
||||
throw new WxPayException("提交被扫支付API接口中,缺少必填参数auth_code!");
|
||||
|
||||
$inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 撤销订单API接口,WxPayReverse中参数out_trade_no和transaction_id必须填写一个
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayReverse $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
*/
|
||||
public static function reverse($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/secapi/pay/reverse";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet())
|
||||
throw new WxPayException("撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!");
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr());//随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond();//请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, true, $timeOut);
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 测速上报,该方法内部封装在report中,使用时请注意异常流程
|
||||
* WxPayReport中interface_url、return_code、result_code、user_ip、execute_time_必填
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayReport $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function report($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/payitil/report";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsInterface_urlSet())
|
||||
throw new WxPayException("接口URL,缺少必填参数interface_url!");
|
||||
if (!$inputObj->IsReturn_codeSet())
|
||||
throw new WxPayException("返回状态码,缺少必填参数return_code!");
|
||||
if (!$inputObj->IsResult_codeSet())
|
||||
throw new WxPayException("业务结果,缺少必填参数result_code!");
|
||||
if (!$inputObj->IsUser_ipSet())
|
||||
throw new WxPayException("访问接口IP,缺少必填参数user_ip!");
|
||||
if (!$inputObj->IsExecute_time_Set())
|
||||
throw new WxPayException("接口耗时,缺少必填参数execute_time_!");
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetUser_ip($_SERVER['REMOTE_ADDR']);//终端ip
|
||||
$inputObj->SetTime(date("YmdHis")); // 商户上报时间
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 生成二维码规则,模式一生成支付二维码
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayBizPayUrl $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function bizpayurl($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
if (!$inputObj->IsProduct_idSet())
|
||||
throw new WxPayException("生成二维码,缺少必填参数product_id!");
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetTime_stamp(time()); // 时间戳
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
|
||||
return $inputObj->GetValues();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 转换短链接
|
||||
* 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),
|
||||
* 减小二维码数据量,提升扫描速度和精确度。
|
||||
* appid、mchid、spbill_create_ip、nonce_str不需要填入
|
||||
* @param WxPayShortUrl $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $wechatInfo
|
||||
* @throws WxPayException
|
||||
* @return 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function shorturl($inputObj, $timeOut, $wechatInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/tools/shorturl";
|
||||
//检测必填参数
|
||||
if (!$inputObj->IsLong_urlSet())
|
||||
throw new WxPayException("需要转换的URL,签名用原串,传输需URL encode!");
|
||||
|
||||
$inputObj->SetAppid($wechatInfo['appid']); // 公众账号ID
|
||||
$inputObj->SetMch_id($wechatInfo['mchid']); // 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); // 随机字符串
|
||||
|
||||
$inputObj->SetSign($wechatInfo); // 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
|
||||
$startTimeStamp = self::getMillisecond(); // 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, false, $timeOut);
|
||||
$result = WxPayResults::Init($response, $wechatInfo);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); // 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 支付结果通用通知
|
||||
* @param function $callback
|
||||
* 直接回调函数使用方法: notify(you_function);
|
||||
* 回调类成员函数方法:notify(array($this, you_function));
|
||||
* $callback 原型为:function function_name($data){}
|
||||
*/
|
||||
public static function notify($callback, &$msg, $xml, $isXML, $db = null)
|
||||
{
|
||||
//如果返回成功则验证签名
|
||||
try
|
||||
{
|
||||
// 假如是XML格式的话
|
||||
if ($isXML)
|
||||
$result = WxPayResults::Init($xml, "", 2, true, $db);
|
||||
else
|
||||
$result = WxPayResults::Init($_GET, "", 2, false, $db);
|
||||
}
|
||||
catch (WxPayException $e)
|
||||
{
|
||||
$msg = $e->errorMessage();
|
||||
return false;
|
||||
}
|
||||
|
||||
return call_user_func($callback, $result, $db);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 发送普通红包
|
||||
* @param WxPaySendredpack $inputObj
|
||||
* @param int $timeOut
|
||||
* @param array $weixinInfo
|
||||
* @throws WxPayException
|
||||
* @return array 成功时返回,其他抛异常
|
||||
*/
|
||||
public static function sendredpack($inputObj, $timeOut, $weixinInfo)
|
||||
{
|
||||
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
|
||||
// 检测必填参数
|
||||
if (!$inputObj->IsMch_billnoSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数mch_billno!");
|
||||
else if (!$inputObj->IsSend_nameSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数send_name!");
|
||||
else if (!$inputObj->IsRe_openidSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数re_openid!");
|
||||
else if (!$inputObj->IsTotal_amountSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数total_amount!");
|
||||
else if (!$inputObj->IsTotal_numSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数total_num!");
|
||||
else if (!$inputObj->IsWishingSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数wishing!");
|
||||
else if (!$inputObj->IsClient_ipSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数client_ip!");
|
||||
else if (!$inputObj->IsAct_nameSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数act_name!");
|
||||
else if (!$inputObj->IsRemarkSet())
|
||||
throw new WxPayException("发送红包接口中,缺少必填参数remark!");
|
||||
|
||||
$inputObj->SetAppid($weixinInfo["appid"]); /// 公众账号ID
|
||||
$inputObj->SetMch_id($weixinInfo["mchid"]); /// 商户号
|
||||
$inputObj->SetNonce_str(self::getNonceStr()); /// 随机字符串
|
||||
|
||||
$inputObj->SetSign($weixinInfo); /// 签名
|
||||
$xml = $inputObj->ToXml();
|
||||
//Log::DEBUG("发送普通红包消息:" . $xml);
|
||||
$startTimeStamp = self::getMillisecond(); /// 请求开始时间
|
||||
$response = self::postXmlCurl($xml, $url, true, $timeOut, $weixinInfo);
|
||||
//Log::DEBUG("发送普通红包消息:" . $response);
|
||||
$result = WxPayResults::Init($response, $weixinInfo, 1, true, null, false);
|
||||
self::reportCostTime($url, $startTimeStamp, $result); /// 上报请求花费时间
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 产生随机字符串,不长于32位
|
||||
* @param int $length
|
||||
* @return 产生的随机字符串
|
||||
*/
|
||||
public static function getNonceStr($length = 32)
|
||||
{
|
||||
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||
$str = "";
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接输出xml
|
||||
* @param string $xml
|
||||
*/
|
||||
public static function replyNotify($xml)
|
||||
{
|
||||
echo $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 上报数据, 上报的时候将屏蔽所有异常流程
|
||||
* @param string $usrl
|
||||
* @param int $startTimeStamp
|
||||
* @param array $data
|
||||
*/
|
||||
private static function reportCostTime($url, $startTimeStamp, $data)
|
||||
{
|
||||
//如果不需要上报数据
|
||||
if (WxPayConfig::REPORT_LEVENL == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//如果仅失败上报
|
||||
if (WxPayConfig::REPORT_LEVENL == 1 &&
|
||||
array_key_exists("return_code", $data) &&
|
||||
$data["return_code"] == "SUCCESS" &&
|
||||
array_key_exists("result_code", $data) &&
|
||||
$data["result_code"] == "SUCCESS"
|
||||
)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//上报逻辑
|
||||
$endTimeStamp = self::getMillisecond();
|
||||
$objInput = new WxPayReport();
|
||||
$objInput->SetInterface_url($url);
|
||||
$objInput->SetExecute_time_($endTimeStamp - $startTimeStamp);
|
||||
//返回状态码
|
||||
if (array_key_exists("return_code", $data))
|
||||
$objInput->SetReturn_code($data["return_code"]);
|
||||
//返回信息
|
||||
if (array_key_exists("return_msg", $data))
|
||||
$objInput->SetReturn_msg($data["return_msg"]);
|
||||
//业务结果
|
||||
if (array_key_exists("result_code", $data))
|
||||
$objInput->SetResult_code($data["result_code"]);
|
||||
//错误代码
|
||||
if (array_key_exists("err_code", $data))
|
||||
$objInput->SetErr_code($data["err_code"]);
|
||||
//错误代码描述
|
||||
if (array_key_exists("err_code_des", $data))
|
||||
$objInput->SetErr_code_des($data["err_code_des"]);
|
||||
//商户订单号
|
||||
if (array_key_exists("out_trade_no", $data))
|
||||
$objInput->SetOut_trade_no($data["out_trade_no"]);
|
||||
//设备号
|
||||
if (array_key_exists("device_info", $data))
|
||||
$objInput->SetDevice_info($data["device_info"]);
|
||||
|
||||
try
|
||||
{
|
||||
self::report($objInput);
|
||||
}
|
||||
catch (WxPayException $e)
|
||||
{
|
||||
//不做任何处理
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 以post方式提交xml到对应的接口url
|
||||
*
|
||||
* @param string $xml 需要post的xml数据
|
||||
* @param string $url url
|
||||
* @param bool $useCert 是否需要证书,默认不需要
|
||||
* @param int $second url执行超时时间,默认30s
|
||||
* @throws WxPayException
|
||||
*/
|
||||
private static function postXmlCurl($xml, $url, $useCert = false, $second = 30, $weixinInfo = null)
|
||||
{
|
||||
// return ihttp_request($url,$xml,false);
|
||||
$ch = curl_init();
|
||||
//设置超时
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
|
||||
|
||||
//如果有配置代理这里就设置代理
|
||||
if (WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" && WxPayConfig::CURL_PROXY_PORT != 0)
|
||||
{
|
||||
curl_setopt($ch, CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST);
|
||||
curl_setopt($ch, CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT);
|
||||
}
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
// edit by benton begin
|
||||
//curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
|
||||
//curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//严格校验
|
||||
// edit by benton end
|
||||
//设置header
|
||||
curl_setopt($ch, CURLOPT_HEADER, false);
|
||||
//要求结果为字符串且输出到屏幕上
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
if ($useCert == true)
|
||||
{
|
||||
//设置证书
|
||||
//使用证书:cert 与 key 分别属于两个.pem文件
|
||||
if (!empty($weixinInfo) && count($weixinInfo) > 0)
|
||||
{
|
||||
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
|
||||
//curl_setopt($ch, CURLOPT_SSLCERT, str_replace("WEIXINMCHID", $weixinInfo["mchid"], WxPayConfig::SSLCERT_PATH));
|
||||
curl_setopt($ch, CURLOPT_SSLCERT, sprintf(WxPayConfig::SSLCERT_PATH(), $weixinInfo['mchid']));
|
||||
|
||||
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
|
||||
//curl_setopt($ch, CURLOPT_SSLKEY, str_replace("WEIXINMCHID", $weixinInfo["mchid"], WxPayConfig::SSLKEY_PATH));
|
||||
curl_setopt($ch, CURLOPT_SSLKEY, sprintf(WxPayConfig::SSLKEY_PATH(), $weixinInfo['mchid']));
|
||||
|
||||
///var_dump(sprintf(WxPayConfig::SSLCERT_PATH(), $weixinInfo['mchid']));
|
||||
///echo '<br>', PHP_EOL;
|
||||
///var_dump(sprintf(WxPayConfig::SSLKEY_PATH(), $weixinInfo['mchid']));
|
||||
}
|
||||
else
|
||||
throw new WxPayException("未传入公众号相关信息。");
|
||||
}
|
||||
//post提交方式
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
|
||||
//运行curl
|
||||
$data = curl_exec($ch);
|
||||
//返回结果
|
||||
if ($data)
|
||||
{
|
||||
curl_close($ch);
|
||||
return $data;
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = curl_errno($ch);
|
||||
$message = curl_error($ch);
|
||||
curl_close($ch);
|
||||
throw new WxPayException("curl出错,错误码:{$error},错误信息:{$message}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取毫秒级别的时间戳
|
||||
*/
|
||||
private static function getMillisecond()
|
||||
{
|
||||
//获取毫秒的时间戳
|
||||
$time = explode(" ", microtime());
|
||||
$time = $time[1] . ($time[0] * 1000);
|
||||
$time2 = explode(".", $time);
|
||||
$time = $time2[0];
|
||||
return $time;
|
||||
}
|
||||
}
|
||||
|
||||
80
codes/agent/game/api/payment/wechat/lib/WxPay.Config.php
Normal file
80
codes/agent/game/api/payment/wechat/lib/WxPay.Config.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 配置账号信息
|
||||
*/
|
||||
class WxPayConfig
|
||||
{
|
||||
public function init($appid = '', $mchid = '', $key = '', $appsecret = '')
|
||||
{
|
||||
$this->appid = $appid;
|
||||
$this->mchid = $mchid;
|
||||
$this->key = $key;
|
||||
$this->appsecret = $appsecret;
|
||||
}
|
||||
//=======【基本信息设置】=====================================
|
||||
//
|
||||
/**
|
||||
* TODO: 修改这里配置为您自己申请的商户信息
|
||||
* 微信公众号信息配置
|
||||
*
|
||||
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
|
||||
*
|
||||
* MCHID:商户号(必须配置,开户邮件中可查看)
|
||||
*
|
||||
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
|
||||
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
|
||||
*
|
||||
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
|
||||
* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
|
||||
* @var string
|
||||
*/
|
||||
public $appid = '';
|
||||
public $mchid = '';
|
||||
public $key = '';
|
||||
public $appsecret = '';
|
||||
|
||||
//=======【证书路径设置】=====================================
|
||||
/**
|
||||
* TODO:设置商户证书路径
|
||||
* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
|
||||
* API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)
|
||||
* @var path
|
||||
*/
|
||||
//const SSLCERT_PATH = 'E:\\java\\apache24www\\syapi\\payment\\wechat\\cert\\WEIXINMCHID\\apiclient_cert.pem';
|
||||
//const SSLKEY_PATH = 'E:\\java\\apache24www\\syapi\\payment\\wechat\\cert\\WEIXINMCHID\\apiclient_key.pem';
|
||||
static public function SSLCERT_PATH()
|
||||
{
|
||||
return dirname(dirname(__FILE__)) . '\\cert\\%s\\apiclient_cert.pem';
|
||||
}
|
||||
|
||||
static public function SSLKEY_PATH()
|
||||
{
|
||||
return dirname(dirname(__FILE__)) . '\\cert\\%s\\apiclient_key.pem';
|
||||
}
|
||||
|
||||
//=======【curl代理设置】===================================
|
||||
/**
|
||||
* TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
|
||||
* 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
|
||||
* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
|
||||
* @var unknown_type
|
||||
*/
|
||||
const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
|
||||
const CURL_PROXY_PORT = 0;//8080;
|
||||
|
||||
//=======【上报信息配置】===================================
|
||||
/**
|
||||
* TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,
|
||||
* 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少
|
||||
* 开启错误上报。
|
||||
* 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
|
||||
* @var int
|
||||
*/
|
||||
const REPORT_LEVENL = 1;
|
||||
|
||||
/**
|
||||
* todo: 默认的通知地址
|
||||
*/
|
||||
const NOTIFY_URL = '';
|
||||
}
|
||||
3948
codes/agent/game/api/payment/wechat/lib/WxPay.Data.php
Normal file
3948
codes/agent/game/api/payment/wechat/lib/WxPay.Data.php
Normal file
File diff suppressed because it is too large
Load Diff
13
codes/agent/game/api/payment/wechat/lib/WxPay.Exception.php
Normal file
13
codes/agent/game/api/payment/wechat/lib/WxPay.Exception.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* 微信支付API异常类
|
||||
* @author widyhu
|
||||
*
|
||||
*/
|
||||
class WxPayException extends Exception {
|
||||
public function errorMessage()
|
||||
{
|
||||
return $this->getMessage();
|
||||
}
|
||||
}
|
||||
112
codes/agent/game/api/payment/wechat/lib/WxPay.Notify.php
Normal file
112
codes/agent/game/api/payment/wechat/lib/WxPay.Notify.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
use phprs\ezsql\Sql;
|
||||
|
||||
/**
|
||||
*
|
||||
* 回调基础类
|
||||
* @author widyhu
|
||||
*
|
||||
*/
|
||||
class WxPayNotify extends WxPayNotifyReply
|
||||
{
|
||||
/**
|
||||
*
|
||||
* 回调入口
|
||||
* @param bool $needSign 是否需要签名输出
|
||||
*/
|
||||
final public function Handle($needSign = true, $db = null)
|
||||
{
|
||||
$msg = "OK";
|
||||
|
||||
// 当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败
|
||||
$input = file_get_contents('php://input');
|
||||
$isxml = true;
|
||||
if (!empty($input) && empty($_GET['out_trade_no']))
|
||||
{
|
||||
$result = WxpayApi::notify(array($this,'NotifyCallBack',), $msg, $input, true, $db);
|
||||
}
|
||||
else
|
||||
{
|
||||
$isxml = false;
|
||||
$result = WxpayApi::notify(array($this,'NotifyCallBack',), $msg, $_GET, false, $db);
|
||||
}
|
||||
|
||||
if ($result == false)
|
||||
{
|
||||
$this->SetReturn_code("FAIL");
|
||||
$this->SetReturn_msg($msg);
|
||||
$this->ReplyNotify(false);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 该分支在成功回调到NotifyCallBack方法,处理完成之后流程
|
||||
$this->SetReturn_code("SUCCESS");
|
||||
$this->SetReturn_msg("OK");
|
||||
}
|
||||
$this->ReplyNotify($needSign, $isxml);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 回调方法入口,子类可重写该方法
|
||||
* 注意:
|
||||
* 1、微信回调超时时间为2s,建议用户使用异步处理流程,确认成功之后立刻回复微信服务器
|
||||
* 2、微信服务器在调用失败或者接到回包为非确认包的时候,会发起重试,需确保你的回调是可以重入
|
||||
* @param array $data 回调解释出的参数
|
||||
* @param string $msg 如果回调处理失败,可以将错误信息输出到该方法
|
||||
* @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调
|
||||
*/
|
||||
public function NotifyProcess($data, &$msg)
|
||||
{
|
||||
//TODO 用户基础该类之后需要重写该方法,成功的时候返回true,失败返回false
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* notify回调方法,该方法中需要赋值需要输出的参数,不可重写
|
||||
* @param array $data
|
||||
* @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调
|
||||
*/
|
||||
final public function NotifyCallBack($data, $db = null)
|
||||
{
|
||||
$msg = "OK";
|
||||
$result = $this->NotifyProcess($data, $msg, $db);
|
||||
if ($result == true)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 回复通知
|
||||
* @param bool $needSign 是否需要签名输出
|
||||
*/
|
||||
final private function ReplyNotify($needSign = true, $isXML)
|
||||
{
|
||||
if ($isXML)
|
||||
{
|
||||
//如果需要签名
|
||||
if ($needSign == true &&
|
||||
$this->GetReturn_code($return_code) == "SUCCESS"
|
||||
)
|
||||
{
|
||||
$this->SetSign();
|
||||
}
|
||||
WxpayApi::replyNotify($this->ToXml());
|
||||
}
|
||||
else
|
||||
{
|
||||
exit('success');
|
||||
}
|
||||
}
|
||||
}
|
||||
124
codes/agent/game/api/payment/wechat/log.php
Normal file
124
codes/agent/game/api/payment/wechat/log.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
// 以下为日志
|
||||
|
||||
interface ILogHandler
|
||||
{
|
||||
public function write($msg);
|
||||
|
||||
}
|
||||
|
||||
class CLogFileHandler implements ILogHandler {
|
||||
private $handle = null;
|
||||
|
||||
public function __construct($file = '')
|
||||
{
|
||||
$this->handle = fopen($file,'a');
|
||||
}
|
||||
|
||||
public function write($msg)
|
||||
{
|
||||
fwrite($this->handle, $msg, 4096);
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
fclose($this->handle);
|
||||
}
|
||||
}
|
||||
|
||||
class Log
|
||||
{
|
||||
private $handler = null;
|
||||
private $level = 15;
|
||||
|
||||
private static $instance = null;
|
||||
|
||||
private function __construct(){}
|
||||
|
||||
private function __clone(){}
|
||||
|
||||
public static function Init($handler = null,$level = 15)
|
||||
{
|
||||
if(!self::$instance instanceof self)
|
||||
{
|
||||
self::$instance = new self();
|
||||
self::$instance->__setHandle($handler);
|
||||
self::$instance->__setLevel($level);
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
|
||||
private function __setHandle($handler){
|
||||
$this->handler = $handler;
|
||||
}
|
||||
|
||||
private function __setLevel($level)
|
||||
{
|
||||
$this->level = $level;
|
||||
}
|
||||
|
||||
public static function DEBUG($msg)
|
||||
{
|
||||
self::$instance->write(1, $msg);
|
||||
}
|
||||
|
||||
public static function WARN($msg)
|
||||
{
|
||||
self::$instance->write(4, $msg);
|
||||
}
|
||||
|
||||
public static function ERROR($msg)
|
||||
{
|
||||
$debugInfo = debug_backtrace();
|
||||
$stack = "[";
|
||||
foreach($debugInfo as $key => $val){
|
||||
if(array_key_exists("file", $val)){
|
||||
$stack .= ",file:" . $val["file"];
|
||||
}
|
||||
if(array_key_exists("line", $val)){
|
||||
$stack .= ",line:" . $val["line"];
|
||||
}
|
||||
if(array_key_exists("function", $val)){
|
||||
$stack .= ",function:" . $val["function"];
|
||||
}
|
||||
}
|
||||
$stack .= "]";
|
||||
self::$instance->write(8, $stack . $msg);
|
||||
}
|
||||
|
||||
public static function INFO($msg)
|
||||
{
|
||||
self::$instance->write(2, $msg);
|
||||
}
|
||||
|
||||
private function getLevelStr($level)
|
||||
{
|
||||
switch ($level)
|
||||
{
|
||||
case 1:
|
||||
return 'debug';
|
||||
break;
|
||||
case 2:
|
||||
return 'info';
|
||||
break;
|
||||
case 4:
|
||||
return 'warn';
|
||||
break;
|
||||
case 8:
|
||||
return 'error';
|
||||
break;
|
||||
default:
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected function write($level,$msg)
|
||||
{
|
||||
if(($level & $this->level) == $level )
|
||||
{
|
||||
$msg = '['.date('Y-m-d H:i:s').']['.$this->getLevelStr($level).'] '.$msg."\n";
|
||||
$this->handler->write($msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
8
codes/agent/game/api/payment/wechat/native.php
Normal file
8
codes/agent/game/api/payment/wechat/native.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* [Weizan System] Copyright (c) 2014 012WZ.COM
|
||||
* Weizan is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
define('IN_MOBILE', true);
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
message('支付失败, 请稍后重试.');
|
||||
217
codes/agent/game/api/payment/wechat/notify.php
Normal file
217
codes/agent/game/api/payment/wechat/notify.php
Normal file
@@ -0,0 +1,217 @@
|
||||
<?php
|
||||
|
||||
use phprs\ezsql\Sql;
|
||||
|
||||
require_once "lib/WxPay.Api.php";
|
||||
require_once 'lib/WxPay.Notify.php';
|
||||
require_once 'log.php';
|
||||
|
||||
class PayNotifyCallBack extends WxPayNotify
|
||||
{
|
||||
// 查询订单
|
||||
public function Queryorder($transaction_id)
|
||||
{
|
||||
/*$input = new WxPayOrderQuery();
|
||||
$input->SetTransaction_id($transaction_id);
|
||||
$result = WxPayApi::orderQuery($input);
|
||||
Log::DEBUG("query:" . json_encode($result));
|
||||
if(array_key_exists("return_code", $result)
|
||||
&& array_key_exists("result_code", $result)
|
||||
&& $result["return_code"] == "SUCCESS"
|
||||
&& $result["result_code"] == "SUCCESS") {
|
||||
return true;
|
||||
}
|
||||
return false;*/
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @note 转换数据编码
|
||||
* @param $data
|
||||
* @param string $charset
|
||||
* @return string
|
||||
* @auther 应俊
|
||||
*/
|
||||
function Characet($data, $charset = 'utf-8')
|
||||
{
|
||||
if (!empty ($data))
|
||||
{
|
||||
$encoding = mb_detect_encoding($data, array('ASCII', 'UTF-8', 'GBK', 'GB2312', 'LATIN1', 'BIG5',));
|
||||
if (0 != strcasecmp($encoding, $charset))
|
||||
{
|
||||
$data = mb_convert_encoding($data, $charset, $encoding);
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
// 重写回调处理函数
|
||||
public function NotifyProcess($data, &$msg, $db = null)
|
||||
{
|
||||
$app_id = 0; // 开发者应用ID
|
||||
$business_id = 0; // 商户ID
|
||||
if (!array_key_exists("transaction_id", $data))
|
||||
{
|
||||
$msg = "输入参数不正确,必须包含transaction_id参数";
|
||||
return false;
|
||||
}
|
||||
|
||||
// 查询订单,判断订单真实性
|
||||
if (!$this->Queryorder($data["transaction_id"]))
|
||||
{
|
||||
$msg = "订单查询失败";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!array_key_exists("out_trade_no", $data))
|
||||
{
|
||||
$msg = "输入参数不正确,不能缺少out_trade_no参数。";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!array_key_exists("attach", $data))
|
||||
{
|
||||
$msg = "输入参数不正确";
|
||||
return false;
|
||||
}
|
||||
|
||||
$attach = $data['attach'];
|
||||
|
||||
if (!empty($attach))
|
||||
{
|
||||
$attach = explode('======', $attach);
|
||||
if (count($attach) == 2)
|
||||
{
|
||||
$app_id = (int)$attach[0];
|
||||
$business_id = (int)$attach[1];
|
||||
|
||||
$businessList = Sql::select('syweb_business.*')
|
||||
->from('syweb_business')
|
||||
->where('syweb_business.id=?', $business_id)
|
||||
->get($db, null);
|
||||
if (!empty($businessList) && count($businessList) > 0)
|
||||
{
|
||||
$signkey = $businessList[0]["signkey"];
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = "找不到的商户信息。";
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = "attach参数格式不正确。";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = "attach参数不能为空";
|
||||
return false;
|
||||
}
|
||||
|
||||
$log = Sql::select('syweb_core_paylog.*')
|
||||
->from('syweb_core_paylog')
|
||||
->where('uniontid=?', $data['out_trade_no'])
|
||||
->get($db, null);
|
||||
if (!empty($log) && count($log) > 0)
|
||||
{
|
||||
$log = $log[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
// 当指定的订单不存在时,则直接返回true
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!empty($log) && $log['status'] == '0')
|
||||
{
|
||||
// 提前设置为已经支付成功状态
|
||||
$recordTemp = array();
|
||||
$recordTemp['status'] = '1';
|
||||
$pdo = $db;
|
||||
$pdo->beginTransaction();
|
||||
Sql::update('syweb_core_paylog')->setArgs($recordTemp)->where('plid = ?', $log['plid'])->exec($pdo);
|
||||
$pdo->commit();
|
||||
|
||||
$log['tag'] = iunserializer($log['tag']);
|
||||
$callbackUrl = $log['tag']['notice_url']; // 回调地址
|
||||
$param_mask = $log['tag']['param_mask']; // 回调参数格式
|
||||
// 验证客户端逻辑处理
|
||||
if (!empty($callbackUrl))
|
||||
{
|
||||
if (!empty($param_mask))
|
||||
{
|
||||
$callback_data = str_replace("%orderNo%", $log["tid"], $param_mask);
|
||||
$callback_data = str_replace("%money%", $log["fee"], $callback_data);
|
||||
|
||||
$callback_data = str_replace("%outtradeNo%", $log["uniontid"], $callback_data);
|
||||
$callback_data = str_replace("%transactionid%", $log['tag']['transaction_id'], $callback_data);
|
||||
$callback_data = str_replace("%signkey%", $signkey, $callback_data);
|
||||
|
||||
$callback_response = ihttp_request($callbackUrl . "?" . $callback_data, "", false);
|
||||
|
||||
$callback_response = mb_convert_encoding($callback_response, "UTF-8");
|
||||
|
||||
//$begin_position = stripos($callback_response,"\r\n\r\n");
|
||||
$begin_position = strstr($callback_response, "\r\n");
|
||||
|
||||
|
||||
if ($begin_position >= 0)
|
||||
{
|
||||
$callback_response = substr($callback_response, $begin_position + 17);
|
||||
}
|
||||
else
|
||||
{
|
||||
$callback_response = "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$callback_data['orderNo'] = $log["tid"];
|
||||
$callback_data['out_trade_no'] = $log["uniontid"]; // 商家订单号
|
||||
$callback_data['transaction_id'] = $log['tag']['transaction_id']; // 微信订单号
|
||||
$callback_data['signkey'] = $signkey;
|
||||
$callback_data = json_encode($callback_data);
|
||||
$callback_response = ihttp_request($callbackUrl, $callback_data, false);
|
||||
}
|
||||
// 发送模板消息接口地址
|
||||
|
||||
|
||||
if (!empty($callback_response) && !is_null(json_decode($callback_response)))
|
||||
{
|
||||
$callback_result = @json_decode($callback_response, true);
|
||||
if ($callback_result['error'] != '0')
|
||||
{
|
||||
// 假如客户端返回非0,则表示逻辑处理失败,则将再次发起
|
||||
$msg = "订单处理出错。";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 假如客户端返回非0,则表示支付失败
|
||||
$msg = "订单处理出错。";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$log['tag']['transaction_id'] = $data['transaction_id'];
|
||||
$log['transaction_id'] = $data['transaction_id'];
|
||||
|
||||
$record = array();
|
||||
$record['status'] = '1';
|
||||
$record['tag'] = iserializer($log['tag']);
|
||||
|
||||
$pdo = $db;
|
||||
$pdo->beginTransaction();
|
||||
Sql::update('syweb_core_paylog')->setArgs($record)->where('plid = ?', $log['plid'])->exec($pdo);
|
||||
$pdo->commit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
131
codes/agent/game/api/payment/wechat/notify1.php
Normal file
131
codes/agent/game/api/payment/wechat/notify1.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
define('IN_MOBILE', true);
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
$input = file_get_contents('php://input');
|
||||
$isxml = true;
|
||||
if (!empty($input) && empty($_GET['out_trade_no'])) {
|
||||
$obj = isimplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
$data = json_decode(json_encode($obj), true);
|
||||
if (empty($data)) {
|
||||
$result = array(
|
||||
'return_code' => 'FAIL',
|
||||
'return_msg' => ''
|
||||
);
|
||||
echo array2xml($result);
|
||||
exit;
|
||||
}
|
||||
if ($data['result_code'] != 'SUCCESS' || $data['return_code'] != 'SUCCESS') {
|
||||
$result = array(
|
||||
'return_code' => 'FAIL',
|
||||
'return_msg' => empty($data['return_msg']) ? $data['err_code_des'] : $data['return_msg']
|
||||
);
|
||||
echo array2xml($result);
|
||||
exit;
|
||||
}
|
||||
$get = $data;
|
||||
} else {
|
||||
$isxml = false;
|
||||
$get = $_GET;
|
||||
}
|
||||
|
||||
$_W['uniacid'] = $_W['weid'] = $get['attach'];
|
||||
$setting = uni_setting($_W['uniacid'], array('payment'));
|
||||
if(is_array($setting['payment'])) {
|
||||
$wechat = $setting['payment']['wechat'];
|
||||
WeUtility::logging('pay', var_export($get, true));
|
||||
if(!empty($wechat)) {
|
||||
ksort($get);
|
||||
$string1 = '';
|
||||
foreach($get as $k => $v) {
|
||||
if($v != '' && $k != 'sign') {
|
||||
$string1 .= "{$k}={$v}&";
|
||||
}
|
||||
}
|
||||
$wechat['signkey'] = ($wechat['version'] == 1) ? $wechat['key'] : $wechat['signkey'];
|
||||
$sign = strtoupper(md5($string1 . "key={$wechat['signkey']}"));
|
||||
if($sign == $get['sign']) {
|
||||
$sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `uniontid`=:uniontid';
|
||||
$params = array();
|
||||
$params[':uniontid'] = $get['out_trade_no'];
|
||||
$log = pdo_fetch($sql, $params);
|
||||
if(!empty($log) && $log['status'] == '0') {
|
||||
$log['tag'] = iunserializer($log['tag']);
|
||||
$log['tag']['transaction_id'] = $get['transaction_id'];
|
||||
$log['uid'] = $log['tag']['uid'];
|
||||
$log['transaction_id'] = $get['transaction_id'];
|
||||
$record = array();
|
||||
$record['status'] = '1';
|
||||
$record['tag'] = iserializer($log['tag']);
|
||||
pdo_update('core_paylog', $record, array('plid' => $log['plid']));
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 1 && !empty($log['encrypt_code']) && $log['acid']) {
|
||||
load()->classs('coupon');
|
||||
$acc = new coupon($log['acid']);
|
||||
$codearr['encrypt_code'] = $log['encrypt_code'];
|
||||
$codearr['module'] = $log['module'];
|
||||
$codearr['card_id'] = $log['card_id'];
|
||||
$acc->PayConsumeCode($codearr);
|
||||
}
|
||||
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 2) {
|
||||
$now = time();
|
||||
$log['card_id'] = intval($log['card_id']);
|
||||
pdo_query('UPDATE ' . tablename('activity_coupon_record') . " SET status = 2, usetime = {$now}, usemodule = '{$log['module']}' WHERE uniacid = :aid AND couponid = :cid AND uid = :uid AND status = 1 LIMIT 1", array(':aid' => $_W['uniacid'], ':uid' => $log['uid'], ':cid' => $log['card_id']));
|
||||
}
|
||||
|
||||
$site = WeUtility::createModuleSite($log['module']);
|
||||
if(!is_error($site)) {
|
||||
$method = 'payResult';
|
||||
if (method_exists($site, $method)) {
|
||||
$ret = array();
|
||||
$ret['weid'] = $log['weid'];
|
||||
$ret['uniacid'] = $log['uniacid'];
|
||||
$ret['acid'] = $log['acid'];
|
||||
$ret['result'] = 'success';
|
||||
$ret['type'] = $log['type'];
|
||||
$ret['from'] = 'notify';
|
||||
$ret['tid'] = $log['tid'];
|
||||
$ret['uniontid'] = $log['uniontid'];
|
||||
$ret['transaction_id'] = $log['transaction_id'];
|
||||
$ret['trade_type'] = $get['trade_type'];
|
||||
$ret['follow'] = $get['is_subscribe'] == 'Y' ? 1 : 0;
|
||||
$ret['user'] = empty($get['openid']) ? $log['openid'] : $get['openid'];
|
||||
$ret['fee'] = $log['fee'];
|
||||
$ret['tag'] = $log['tag'];
|
||||
$ret['is_usecard'] = $log['is_usecard'];
|
||||
$ret['card_type'] = $log['card_type'];
|
||||
$ret['card_fee'] = $log['card_fee'];
|
||||
$ret['card_id'] = $log['card_id'];
|
||||
if(!empty($get['time_end'])) {
|
||||
$ret['paytime'] = strtotime($get['time_end']);
|
||||
}
|
||||
$site->$method($ret);
|
||||
if($isxml) {
|
||||
$result = array(
|
||||
'return_code' => 'SUCCESS',
|
||||
'return_msg' => 'OK'
|
||||
);
|
||||
echo array2xml($result);
|
||||
exit;
|
||||
} else {
|
||||
exit('success');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if($isxml) {
|
||||
$result = array(
|
||||
'return_code' => 'FAIL',
|
||||
'return_msg' => ''
|
||||
);
|
||||
echo array2xml($result);
|
||||
exit;
|
||||
} else {
|
||||
exit('fail');
|
||||
}
|
||||
21
codes/agent/game/api/payment/wechat/pay.php
Normal file
21
codes/agent/game/api/payment/wechat/pay.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
header('Access-Control-Allow-Origin:*');// 指定允许其他域名访问
|
||||
header('Access-Control-Allow-Methods:POST');// 响应类型
|
||||
header('Access-Control-Allow-Headers:x-requested-with,content-type');
|
||||
|
||||
/**
|
||||
* 登录相关接口
|
||||
*/
|
||||
use phprs\Bootstrap;
|
||||
use phprs\util\Logger;
|
||||
|
||||
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
require_once IA_ROOT.'/lib/phprs/AutoLoad.php';
|
||||
Bootstrap::run(IA_ROOT.'/source/conf.php');
|
||||
|
||||
use phprs\ezsql\Sql;
|
||||
|
||||
|
||||
|
||||
?>
|
||||
86
codes/agent/game/api/payment/wechat/rights.php
Normal file
86
codes/agent/game/api/payment/wechat/rights.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* [Weizan System] Copyright (c) 2014 012WZ.COM
|
||||
* Weizan is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
$input = file_get_contents('php://input');
|
||||
|
||||
if (preg_match('/(\<\!DOCTYPE|\<\!ENTITY)/i', $input)) {
|
||||
exit('fail');
|
||||
}
|
||||
libxml_disable_entity_loader(true);
|
||||
$obj = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
if($obj instanceof SimpleXMLElement && !empty($obj->FeedBackId)) {
|
||||
$data = array(
|
||||
'openid' => trim($obj->OpenId),
|
||||
'appid' => trim($obj->AppId),
|
||||
'timestamp' => trim($obj->TimeStamp),
|
||||
'msgtype' => trim($obj->MsgType),
|
||||
'feedbackid' => trim($obj->FeedBackId),
|
||||
'transid' => trim($obj->TransId),
|
||||
'reason' => trim($obj->Reason),
|
||||
'solution' => trim($obj->Solution),
|
||||
'extinfo' => trim($obj->ExtInfo),
|
||||
'appsignature' => trim($obj->AppSignature),
|
||||
'signmethod' => trim($obj->SignMethod),
|
||||
);
|
||||
if (!empty($obj->PicInfo) && !empty($obj->PicInfo->item)) {
|
||||
foreach ($obj->PicInfo->item as $item) {
|
||||
$data['picinfo'][] = trim($item->PicUrl);
|
||||
}
|
||||
}
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
WeUtility::logging('pay-rights', $input);
|
||||
$_W['uniacid'] = pdo_fetchcolumn("SELECT uniacid FROM ".tablename('account_wechats')." WHERE `key` = :key", array(':key' => $data['appid']));
|
||||
$setting = uni_setting($_W['uniacid'], array('payment'));
|
||||
$_W['weid'] = $_W['uniacid'];
|
||||
|
||||
if (empty($setting['payment'])) {
|
||||
exit('failed');
|
||||
}
|
||||
$data['appkey'] = $setting['payment']['wechat']['signkey'];
|
||||
if (!checkSign($data)) {
|
||||
exit('failed');
|
||||
}
|
||||
if ($data['msgtype'] == 'request') {
|
||||
$insert = array(
|
||||
'weid' => $_W['weid'],
|
||||
'openid' => $data['openid'],
|
||||
'feedbackid' => $data['feedbackid'],
|
||||
'transid' => $data['transid'],
|
||||
'reason' => $data['reason'],
|
||||
'solution' => $data['solution'],
|
||||
'remark' => $data['extinfo'],
|
||||
'createtime' => $data['timestamp'],
|
||||
'status' => 0,
|
||||
);
|
||||
pdo_insert('shopping_feedback', $insert);
|
||||
exit('success');
|
||||
} elseif ($data['msgtype'] == 'confirm') {
|
||||
pdo_update('shopping_feedback', array('status' => 1), array('feedbackid' => $data['feedbackid']));
|
||||
exit('success');
|
||||
} elseif ($data['msgtype'] == 'reject') {
|
||||
pdo_update('shopping_feedback', array('status' => 2), array('feedbackid' => $data['feedbackid']));
|
||||
exit('success');
|
||||
} else {
|
||||
exit('failed');
|
||||
}
|
||||
}
|
||||
exit('failed');
|
||||
|
||||
function checkSign($data) {
|
||||
$string = '';
|
||||
$keys = array('appid', 'timestamp', 'openid', 'appkey');
|
||||
sort($keys);
|
||||
foreach($keys as $key) {
|
||||
$v = $data[$key];
|
||||
$key = strtolower($key);
|
||||
$string .= "{$key}={$v}&";
|
||||
}
|
||||
$string = sha1(rtrim($string, '&'));
|
||||
if ($data['appsignature'] == $string) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
27
codes/agent/game/api/payment/wechat/warning.php
Normal file
27
codes/agent/game/api/payment/wechat/warning.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* [Weizan System] Copyright (c) 2014 012WZ.COM
|
||||
* Weizan is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
require '../../source/bootstrap.inc.php';
|
||||
$input = file_get_contents('php://input');
|
||||
|
||||
if (preg_match('/(\<\!DOCTYPE|\<\!ENTITY)/i', $input)) {
|
||||
exit('fail');
|
||||
}
|
||||
libxml_disable_entity_loader(true);
|
||||
$obj = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
if($obj instanceof SimpleXMLElement && !empty($obj->FeedBackId)) {
|
||||
$data = array(
|
||||
'appid' => trim($obj->AppId),
|
||||
'timestamp' => trim($obj->TimeStamp),
|
||||
'errortype' => trim($obj->ErrorType),
|
||||
'description' => trim($obj->Description),
|
||||
'alarmcontent' => trim($obj->AlarmContent),
|
||||
'appsignature' => trim($obj->AppSignature),
|
||||
'signmethod' => trim($obj->SignMethod),
|
||||
);
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
WeUtility::logging('pay-warning', $input);
|
||||
}
|
||||
exit('success');
|
||||
Reference in New Issue
Block a user