PHP银联商务公众号支付接口包含点金计划以及商家小票

<?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;
}
?>

觉得有用点赞!点赞!点赞!巴巴的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值