首页 > 编程语言 >PHP处理建行数币支付的几种情况

PHP处理建行数币支付的几种情况

时间:2023-08-12 10:35:47浏览次数:48  
标签:建行 FULL 加密 sign 数币 ----- 参数 PHP PUBKEY

一、支付时,验签

MAC参数生成原理:
$A = "MERCHANTID=105002653991975&POSID=042166601&BRANCHID=322000000&ORDERID=202201241515557833&PAYMENT=0.01&CURCODE=01&TXCODE=HT0000&REMARK1=bill&REMARK2=&RETURNTYPE=1&TIMEOUT="; //根据接口文档将需要加密的参数进行组合
$B = substr($PUBKEY,-30); //公钥的后30位B。
$MAC = md5($A.'&PUB='.$B); //MD5加密获得mac
最后将$MAC附加到请求参数串上使用。

二、构建建行数字人民币支付网关下单参数

如果是小程序唤起最后必须加&TX_FLAG=3,即:

如果不加,跳转到MRCH_URL是不可能正常的。

同时,小程序唤起的时候,支付成功通知有两种模式:服务器端通知和小程序回调

服务器端通知所有参数都在URL并不是在BODY

小程序回调要注意,支付完成后关闭小程序是不可能调用回调方法的,且回调在小程序的Application里捕捉,不能在页面代码里。

$epay_url = https://ch5.dcep.ccb.com/CCBIS/ccbMain_XM?CCB_IBSVersion=V6&MERCHANTID=105002653991975&POSID=042166601&BRANCHID=322000000&ORDERID=202201241515557833&PAYMENT=0.01&CURCODE=01&TXCODE=HT0000&REMARK1=bill&REMARK2=&RETURNTYPE=1&TIMEOUT=&MAC=daa34ac9601025550d43ec3929a06b9e&Mrch_url=https://www.baidu.com&TX_FLAG=3

三、支付成功通知的验签

a.建行的加密参数是GBK的所以验签的时候的UTF8的编码要转GBK的

mb开头的方法,可能要看你服务器端有没有安装这个插件了。

mb_check_encoding($_GET["ZHJF"],"utf-8") ? iconv("utf-8", "GBK", $_GET["ZHJF"]) : $_GET["ZHJF"]

  

b.建行是采用的rsawithmd5的加密方法所有验签时要用到OPENSSL_ALGO_MD5参数并且把加密串转2进制 pack(“H” .
strlen($sign), $sign),这里把16进制的公钥转成验签可识别格式很重要 ,很多人才用了pem文件的方式,其实不用。

$PUBKEY = "30819d300d06092a864886f70d010101050003818b0030818702818100c4b36133b9e762228f2b8e6dcc04dbb160b6e3134cc00c7e5494bc49ac9c87d84ed43738bb67b74526246bfdd04b3a68e11ca1b02a095806b0ee57548daf3456789012cc75dc37fbd30fe41bcdc8340f52ab071882e6a88687bdf588fbb0a98dc4f75a8b4451edce67890432168c9242dd66237679621d0416a4872444c1567f45g469";
            $FULL_PUBKEY = chunk_split(base64_encode(hex2bin($PUBKEY)), 64, "\n");
            $FULL_PUBKEY = "-----BEGIN PUBLIC KEY-----\n" . $FULL_PUBKEY . "-----END PUBLIC KEY-----";
                    
            $oOpenSSLAsymmetricKey = openssl_get_publickey($FULL_PUBKEY);
            $sign = $_GET["SIGN"];//传入url里的签名
            $sign = pack("H".strlen($sign), $sign);
            if (openssl_verify($A, $sign, $oOpenSSLAsymmetricKey, OPENSSL_ALGO_MD5) == 1) {
                 //成功
            }

  

c.建行提供的一个公钥是一串 字符串 并且是16进制的,需要把这串 16进制的公钥转成PEM

$PUBKEY = "30819d300d06092a864886f70d010101050003818b0030818702818100c4b36133b9e762228f2b8e6dcc04dbb160b6e3134cc00c7e5494bc49ac9c87d84ed43738bb67b74526246bfdd04b3a68e11ca1b02a095806b0ee57548daf3456789012cc75dc37fbd30fe41bcdc8340f52ab071882e6a88687bdf588fbb0a98dc4f75a8b4451edce67890432168c9242dd66237679621d0416a4872444c1567f45g469";
            $FULL_PUBKEY = chunk_split(base64_encode(hex2bin($PUBKEY)), 64, "\n");
            $FULL_PUBKEY = "-----BEGIN PUBLIC KEY-----\n" . $FULL_PUBKEY . "-----END PUBLIC KEY-----";
                    
            $oOpenSSLAsymmetricKey = openssl_get_publickey($FULL_PUBKEY);

  

标签:建行,FULL,加密,sign,数币,-----,参数,PHP,PUBKEY
From: https://www.cnblogs.com/si812cn/p/17624447.html

相关文章

  • QueryPath, php上的jQuery
      红得发紫的jQuery框架是专门用于页面Javascript程序设计的,它通过一种优雅的方式让我们轻松自如地操作页面的所有元素而无须担心浏览器版本以及兼容性等问题。受到jQuery的启发,一种试图让Web开发者在PHP中直接采用jQuery方式操纵和生成HTML/XML元素的QueryPath计划开始了,库的......
  • PHP 使用xhprof 分析程序
    PHP增加扩展xhrofgitclonehttps://github.com/longxinH/xhprof.git./xhprofcdxhprof/extension//path/to/php7/bin/phpize./configure--with-php-config=/path/to/php7/bin/php-configmake&&sudomakeinstallPHP配置增加ini[xhprof]extension=xhprof.so......
  • 基于PHP的家居设计交流平台
    随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的基于PHP的家居设计交流平台,会使基于PHP的家居设计交流平台的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本基于PHP的家居设计交流平台是针对目前基于PHP的家居设计......
  • PHP面试的时候,遇到拼团这个功能,可能会问到的问题,带详细答案
    如何设计数据库模型来支持拼团功能?答案:拼团功能涉及到多个用户参与同一团的情况,可以设计以下表结构:Product表:存储商品信息,包括商品ID、名称、价格等字段。Group表:存储拼团信息,包括团ID、商品ID、成团人数、拼团价格等字段。User表:存储用户信息,包括用户ID、用户名、联......
  • PHP语言使用隧道代码示例
    /***请求**@param[type]$targetUrl目标站点*@param[type]$proxyIp代理ip*@param[type]$proxyPort代理端口*@param[type]$proxyUserAuthKey*@param[type]$proxyPasswordAuthPwd*@returnvoid*/functionsendRequest($targetUrl,$proxyIp,$proxyPort,$proxy......
  • PHP提薪模块
    在使用es搜索的时候需要注意以下这几点文档(Document)与索引(Index):在ES中,文档是最小的数据单元,类似于数据库中的一行记录。文档组织在索引中,索引类似于数据库中的表。了解如何创建索引和插入文档是基本的操作。分布式架构:ES是分布式的,数据被分片存储在不同的节点上。学习节点之间......
  • Thinkphp 5.0.23 远程代码执行漏洞
    漏洞简介ThinkPHP是一款运用极广的PHP开发框架。在ThinkPHP5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。漏洞复现开启vulhub靶场环境,确保ThinkPHP正常运行cdvulhub-master/thinkp......
  • php如何定义多维数组以某个字符去输出对应的值
    $arr=[['id'=>123,'test'=>['id'=>2,'title'=>"测试",'test3'=>['list'=>123]]]];$field="test.test3.list";foreach($ar......
  • PHP秒杀面试题
    什么是秒杀系统:秒杀系统是一个处理大量并发用户请求的系统,通常用于限时促销或特定活动中,用户可以在特定时间内以抢购的方式购买商品或服务。秒杀系统可能面临的挑战是什么?秒杀系统可能面临以下挑战:高并发:大量用户在同一时间请求系统,可能导致服务器压力巨大。数据库压......
  • windows下Sphinx + php 简易入门案例
    Sphinx3.5.1windows使用流程官网地址下载地址下载完成后会有这样一个目录,新建data和log目录存放数据和日志将etc目录的sphinx.conf.dist文件复制一份到bin目录下,将.dist删除以下是我的配置文件,可以根据下面的进行修改,如果有特别的需求可以看下面3.x的文档sourcedoc......