微信开发 ━━ 微信商户v3微信支付查询之php篇

官方指南:《查询订单API》

//根据微信订单号查询
https://api.mch.weixin.qq.com/v3/pay/transactions/id/1217752501201407033233368018?mchid=1230000109
//根据商户订单号查询
https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/1217752501201407033233368018?mchid=1230000109

总体比较简单,就是根据订单号问微信要结果,当然直接用链接肯定不行,还是需要提供签名,否则就会提示http头错误。

{“code”:“SIGN_ERROR”,“message”:“Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》”}

// 1.信息准备
$mchid = 'wx1234567890abcdefgh';//商户id
$xlid = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';//证书序列号
$apiclient_key = 'apiclient_key.pem';//证书签名,官网下载,存放于服务器本地,注意路径
$time = time(); //时间戳
$orderid = 'orderid_1234567890abcdefghijklmn';//订单编号
$noncestr = md5($orderid.$time.rand());//随机字符串,可以将订单编号存于此处
$apiurl = 'https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/'.$orderid.'?mchid='.$mchid;
$urlarr = parse_url($apiurl);
$url = $urlarr['path'].(!empty($urlarr['query'])?'?'.$urlarr['query']:'');
$jsonData = '';

// 2.头部签名
$str = "POST"."\n".$url."\n".$time."\n".$noncestr."\n".$jsonData."\n";
$signHead = getSign($str);
$token = sprintf('mchid="%s",serial_no="%s",nonce_str="%s",timestamp="%d",signature="%s"',$mchid,$xlid,$noncestr,$time,$signHead);
$header  = array(
	'Content-Type:application/json; charset=UTF-8',
	'Accept:application/json',
	'User-Agent:*/*',
	'Authorization:WECHATPAY2-SHA256-RSA2048 '.$token
);

// 3.提交请求
$res = httpRequest($apiurl,$jsonData,$header);
echo json_decode($res,true);

// 4.涉及方法
// http请求
function httpRequest($url='',$data='',$header='')
{
	$curl = curl_init(); // 启动一个CURL会话
	curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在,如果出错则修改为0,默认为1
	curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
	curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer	
	if(!empty($data)){
		curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
	}
	curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
	curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 
	if(!empty($header)){
		curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//$header以array格式
	}
	
	$response = curl_exec($curl); // 执行操作
	
	if (curl_errno($curl)){
		echo 'Error:'.curl_error($curl);//捕抓异常
	}
	
	curl_close($curl); // 关闭CURL会话
	return $response; // 返回数据,json格式
}
// 生成签名
function getSign($content)
{
	$binary_signature = "";
	$privateKey = file_get_contents($apiclient_key);
	$algo = "SHA256";
	openssl_sign($content, $binary_signature, $privateKey, $algo);
	return base64_encode($binary_signature);
}

参考:
微信开发 ━━ 微信商户v3微信小程序支付方式开发之php篇

无语…

此文章质量较低,篇幅太短,广告涉嫌违规,外链过多,缺少代码,图片涉嫌违规。

微信开发 ━━ 微信商户v3微信支付查询之php篇_第1张图片

官方指南之签名
官方国际版签名
官方开发文档境内之查询订单
JSAPI-JSSDK-小程序接入方式对比

你可能感兴趣的:(PHP,App,php,微信,https,微信支付,支付)