<?php
//测试号相关信息
$qwb_jine_1 = 1; //金额
$qwb_jine = $qwb_jine_1*100; //已 分 做单位
$mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';//MD5密钥
$mid = '898340149000005';//商户号
$tid = '88880001';//终端号
$time = time();
$requestTimestamp = date('Y-m-d H:i:s',$time);
$merOrderId = "4469".$rsDG["danhao"];//订单号
$msgType = 'WXPay.jsPay';//微信支付:WXPay.jsPay,支付宝支付:trade.jsPay,银联支付:qmf.jspay(qmf.webPay)
$data = [
'instMid' => 'YUEDANDEFAULT',//业务类型
'merOrderId' => $merOrderId,//订单号
'mid' => $mid,//商户号
'msgSrc' => 'WWW.TEST.COM',//消息来源
'msgType' => $msgType,//消息类型
'orderDesc' => '测试',//订单描述
'requestTimestamp' => $requestTimestamp,//报文请求时间
'tid' => $tid,//终端号
'totalAmount' => $qwb_jine,//支付金额
//'notifyUrl' => 'https://s-purchase.com/m/pay/notify_url.php',//支付结果通知地址返回当前页面POST获取merOrderId后来修改订单状态
'returnUrl' => 'https://s-purchase.com/m/pay/payCalllback.php',//支付完成返回界面GRT获取merOrderId后来修改订单状态
'signType' => 'SHA256',//上送SHA256
];
ksort($data);//对关联数组按照键名进行升序排序:
reset($data);//输出数组中的当前元素和下一个元素的值,然后把数组的内部指针重置到数组中的第一个元素
$options = '';
foreach ($data as $key => $value) {//遍历
$options .= $key . '=' . $value .'&';
}
$options = rtrim($options, '&');
//存在转义字符,那么去掉转义
if(get_magic_quotes_gpc()){
$options = stripslashes($options);
}
$sign_1 = $options . $mdKey;
$sign = trim(hash("sha256", $sign_1));//sha256计算
$options .= '&sign=' . $sign;
$url = 'https://qr-test2.chinaums.com/netpay-portal/webpay/pay.do?'.$options;
//获取到url之后直接跳转即可
header('Location: '.$url);
?>
官方文档的签名规则是:
签名方式字段signType上送值为:SHA256 (请勿上送MD5),计算sign的输入数据为待签名字符串加上key(即:通讯密钥),key由网付前置平台分配。在请求参数列表中,除去sign参数外,其他需要使用到的参数均为要签名的参数。
我是利用通知完成后跳转的页面GET获取的status
status取值说明:
NEW_ORDER 新订单
UNKNOWN 不明确的交易状态
TRADE_CLOSED 在指定时间段内未支付时关闭的交易;在交易完成撤销成功时关闭的交易;支付失败的交易。 TRADE_CLOSED的交易不允许进行任何操作。
WAIT_BUYER_PAY 交易创建,等待买家付款。
TRADE_SUCCESS 支付成功
TRADE_REFUND 订单转入退货流程 退货可能是部分也可能是全部。
2020年9月28日补充(最近银联又在整什么东西“点金计划”“商家小票”),前提是开通特约商户的点金计划和商家小票
这里我们做的是支付完成后点击调转到指定页面
给的文档中是这样介绍的》》》商户指定页面(公众号支付,跳转至下单接口中商户传入的returnURL)
payCalllback.php处理
<?php
$merOrderId = $_GET["merOrderId"];//returnUrl传输的链接GET获取参数(订单号)
$DG_ID = substr($merOrderId, 4);//银联要求merOrderId必须带4469这里我们截取掉
if($_REQUEST['status'] == 'WAIT_BUYER_PAY'){//判断下是否支付成功
echo"<script LANGUAGE='javascript'>alert('支付失败!');window.top.location='".$wapUrlAddr."/A_order.php';</script>";
exit();
}elseif($_REQUEST['status'] == 'TRADE_SUCCESS' ){
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="referrer" content="origin">
<meta name="viewport"
content="width=device-width, viewport-fit=cover, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<title>支付完成</title>
<script type="text/javascript" charset="UTF-8" src="https://wx.gtimg.com/pay_h5/goldplan/js/jgoldplan-1.0.0.js"//必须引用的JSSDK
</script>
<script type="text/javascript" src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script>
<script type="text/javascript" src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style>
body {
font-family: PingFang SC, "Helvetica Neue", Arial, sans-serif;
}
.order_box {
text-align: center;
}
.order_box .bussiness_avt img {
width: 65px;
height: 65px;
border-radius: 100%;
border: 1px solid #E0E0E0;
}
.b_name {
font-size: 14px;
font-weight: 500;
color: #333333;
margin-top: 6px;
}
.col_box {
margin-top: 35px;
}
.col_box .col {
display: -webkit-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
-webkit-justify-content: space-between;
justify-content: space-between;
font-size: 14px;
color: #333;
margin-bottom: 14px;
}
.col .ct.price {
color: #E61515
}
.btns {
display: -webkit-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
-webkit-justify-content: space-between;
justify-content: space-between;
margin-top: 31px;
}
.btns .btn {
width: 147px;
height: 35px;
line-height: 35px;
font-size: 14px;
border-radius: 39px;
border: 1px solid #CD2314;
box-sizing: border-box;
color: #CD2314;
}
.btns .btn.detail {
background: linear-gradient(270deg, #D51010 0%, #EF4D2D 100%);
color: #fff;
}
</style>
</head>
<body>
<div class="order_box">
<div class="bussiness_avt">
<img id="b_avt" src="<?=$gz_logo?>">
</div>
<!--<div class="b_name" id="b_name">
<?=$web_gz?>
</div>-->
<div class="col_box">
<div class="col">
<div class="lab">订单编号:</div>
<div id="order_danhao" class="ct"></div>
</div>
<div class="col">
<div class="lab">支付时间</div>
<div id="order_time" class="ct"></div>
</div>
<div class="col">
<div class="lab">实付金额</div>
<div id="order_jine" class="ct price"></div>
</div>
</div>
<div class="btns">
<div id="backHome" class="btn home">返回首页</div>
<div id="toOrder" class="btn detail">查看详情</div>
</div>
</div>
<script>//执行异步通知来达到修改订单状态可当点页面的内容展示
$.ajax({
type: "GET",
url: "ajax.php",//调转页面
data: {
//sub_mch_id: sub_mch_id,
merOrderId: <?=$DG_ID?>,//传递订单号
act : "getTradeInfoAfterWxPay"
},
dataType: "json",//表示ajax.php的数据以json格式传回
success: function (data) {
console.log(data)
if (data.status == "success") {
var info = data.data;
var homeLink = info.indexUrl;
var detailLink = info.orderUrl;
$("#order_danhao").html(info.danhao)
$("#order_time").html(info.time)
$("#order_jine").html(info.jine)
//初始化小票
var initData = {
action: 'onIframeReady',
displayStyle: 'SHOW_CUSTOM_PAGE'
}
var initPostData = JSON.stringify(initData)
parent.postMessage(initPostData, 'https://payapp.weixin.qq.com')
//注册点击事件(去详情)
document.getElementById("toOrder").onclick = function () {
var mchData = {
action: 'jumpOut',
jumpOutUrl: detailLink //跳转的页面
}
var postData = JSON.stringify(mchData)
parent.postMessage(postData, 'https://payapp.weixin.qq.com')
}
//注册点击事件(去首页)
document.getElementById("backHome").onclick = function () {
var mchData = {
action: 'jumpOut',
jumpOutUrl: homeLink //跳转的页面
}
var postData = JSON.stringify(mchData)
parent.postMessage(postData, 'https://payapp.weixin.qq.com')
}
}
}
});
</script>
</body>
</html>
<?php
}
?>
ajax.php处理
<?php
if($_REQUEST["act"]=="getTradeInfoAfterWxPay"){
$DG_ID = $_GET["merOrderId"];
//修改订单状态代码
}else{
$Member_jine = 222;
}
//订单信息调取成功
$infoArray["status"] = "success";
$infoArray["data"]["time"] = 2020-09-28;//订单支付时间
$infoArray["data"]["jine"] = 10000;//支付金额
$infoArray["data"]["danhao"] = 123456789;//订单号
$infoArray["data"]["indexUrl"] = "/index.php";//返回首页
$infoArray["data"]["orderUrl"] = "/A_order.php";//返回订单页
//订单不存在
$josn = json_encode($infoArray, true);
echo $josn;
exit;
}
?>
觉得有用点赞!点赞!点赞!巴巴的。