IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 之建行龙支付 - 被扫查单(商家扫码客户二维码),查询订单是否付款成功 -> 正文阅读

[PHP知识库]PHP 之建行龙支付 - 被扫查单(商家扫码客户二维码),查询订单是否付款成功

完整建行支付
建行主扫支付:https://blog.csdn.net/weixin_42674576/article/details/122010126?spm=1001.2014.3001.5501
建行被扫支付:https://blog.csdn.net/weixin_42674576/article/details/122380110?spm=1001.2014.3001.5501
退款:https://blog.csdn.net/weixin_42674576/article/details/122428305

<?php
namespace service\ccb;
use app\util\HttpUtil;

class QueryService
{
    // 请求接口域名
    const HOST = 'https://ibsbjstar.ccb.com.cn/CCBIS/B2CMainPlat_00_BEPAY';
    const MD5KEY = '20120315201809041004';

    /**
     * 支付查询 轮询订单结果-PAY101
     */
    public function query($input) {
        $param = config('ccb.bePay');

        $publicParam = config('ccb.public');

        $data = [
            'MERCHANTID'   => $publicParam['merchant_id'],  // 商户号
            'POSID'        => $publicParam['pos_id'],       // 柜台号
            'BRANCHID'     => $publicParam['branch_id'],    // 分行号
            'GROUPMCH'     => '',                           // 集团商户信息
            'TXCODE'       => 'PAY101',                     // 交易码
            'MERFLAG'      => $param['mer_flag'],           // 商户类型
            'TERMNO1'      => '',                           // 终端编号 1
            'TERMNO2'      => '',                           // 终端编号 2
            'ORDERID'      => $input['order'],              // 订单号
            'QRYTIME'      => $input['qr_time'],            // 查询次数 从1开始
            'QRCODE'       => isset($input['code']) ? $input['code'] : '',            // 码信息(一维码、二维码)
            'QRCODETYPE'   => isset($input['code_type']) ? $input['code_type'] : '',  //二维码类型 如QRCODE为空 此参数为必输,1:龙支付2:微信3:支付宝4:银联
            'REMARK1'      => '',    // 备注 1
            'REMARK2'      => '',    // 备注 2
            'SUB_APPID'    => '',    // 子商户公众账号 ID
            'RETURN_FIELD' => '',    // 返回信息位图
        ];

        // 与支付的区别TXCODE不一样,需要传QRYTIME,QRCODE和QRCODETYPE两个需传一个
        // 后续计算签名和加密串跟支付类似
        // 计算签名
        $sign = $this->calSign($this->sortParams($data));

        $data['SIGN'] = $sign;

        // 计算加密串
        $params = http_build_query($data);

        $pubKey = substr($publicParam['pub_key'], -30);

        $pubKey = substr($pubKey, 0, 8);

        $data['ccbParam'] = $this->calCcbParam($params, $pubKey);

        // 获取要请求的参数
        $requestData = $this->getRequestData($data);

        $url = self::HOST . '?' . http_build_query($requestData);

        $httpRequest = new HttpUtil();

        $res = $httpRequest::post($url);

        return $res;
    }


    /**
     * 按key升序排序,同时去掉空值
     * @param $params array
     * @return mixed
     */
    public function sortParams($params) {
        ksort($params);
        foreach ($params as $key => $value) {
            if (empty($value) && $value == '') {
                unset($params[$key]);
            }
        }
        return $params;
    }

    /**
     * 计算签名
     * @param $params array 不含空值
     * @return string
     */
    public function calSign($params) {
        return md5(http_build_query($params) . self::MD5KEY);
    }

    /**
     * 真正请求建行接口要传的参数
     * @param $data array
     * @return array
     */
    public function getRequestData($data) {
        return [
            'MERCHANTID' => $data['MERCHANTID'],
            'POSID'      => $data['POSID'],
            'BRANCHID'   => $data['BRANCHID'],
            'ccbParam'   => $data['ccbParam'],
        ];
    }

    /**
     * 计算ccbparam
     * @param $params string
     * @param $key string
     * @return string
     */
    public function calCcbParam($params, $key) {
        $res = openssl_encrypt (iconv("utf-8", "utf-16", $params), 'DES-ECB', $key);
        $res = str_replace('+', ',', $res);
        $res = urlencode($res);
        return $res;
    }
}

完成后,在$input中传入参数:
order:订单号
code:码信息(扫码得到的字符串)
code_type:二维码类型 如未上送 QRCODE 则此参数为必输,1:龙支付2:微信3:支付宝4:银联
qr_time:查询次数,从1开始,每次+1,最高6次

被扫支付成功后,查询订单状态,接口返回如下:
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:46:49  更:2022-01-11 23:47:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:44:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码