惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
罗磊的独立博客
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
量子位
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
B
Blog RSS Feed
腾讯CDC
博客园_首页
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
博客园 - Franky
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
D
Docker
P
Privacy & Cybersecurity Law Blog
S
Securelist
V
V2EX
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
The Hacker News
The Hacker News
Microsoft Azure Blog
Microsoft Azure Blog
AWS News Blog
AWS News Blog
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
T
The Exploit Database - CXSecurity.com
Help Net Security
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
Recent Announcements
Recent Announcements
Cloudbric
Cloudbric
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Latest news
Latest news
MongoDB | Blog
MongoDB | Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recorded Future
Recorded Future
V2EX - 技术
V2EX - 技术

博客园 - 懒人ABC

Docker 国内镜像源加速列表(转载,真实可用)-https://zhuanlan.zhihu.com/p/1914353637645345944 windows10操作系统下安装facefusion实现视频换脸(windows server不支持哈) 用spark3.5.2+scala2.13.11+JDK17统计文件单词词频 DeepSeek与Elasticsearch结合,可以通过AI模型增强搜索、分析和自动化能力,实现更智能的数据处理(含订单备货和库存预警案例) 配置navicat客户端通过ssl连接windows server 2025的sqlserver2022数据库服务器 在debain下安装思源黑体(Source Han Sans)的注意点 windows10下编译php扩展 获取工作表的名称 获取名称管理器里名称应用的所有单元格 spreadsheet 获取名称管理器 sftp配置多个用户权限的问题 十三、Vue中的computed属性 十二、react-reudx之@connect 摆脱redux的繁琐操作 十一、微信小程序-var、let、const用法详解 十、es6之扩展运算符 三个点(...) 九、小程序 Redux详解与在小程序中怎么使用(action和reducers) 八、wepy代码规范 七、Flex 布局 六、页面跳转和路由
PHP处理建行数币支付的几种情况
懒人ABC · 2023-08-12 · via 博客园 - 懒人ABC

一、支付时,验签

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);