微信支付Native下单API V3接口开发详解

news2024/9/30 21:34:51

    这几天做微信支付Native下单接口调用、签名这块,弄的我焦头烂额,翻了很多网上配置,各有不同,写的不清不楚,只能自己慢慢研究,尝试了无数种解决坑的方案,嚼文咬字看官方的文档调试,文档写得不清不楚,看得人云里雾里。

1、首先登录微信公众平台开通微信支付,开通配置各类信息 ,耗时1天

扫码注册微信支付商户号,开通native支付

 设置APIV3秘钥,配置申请API证书并下载

 2、下载官方提供的sdk源码进行开发,但是框架不实用,封装的各种类,但是没有示例代码,就没用了,用网上找得实例代码调式,耗时1天

3、生成签名、走了弯路,耗时1天

/**
 * 生成签名
 * @param string $method 请求方法 POST 或者GET
 * @param string $url 请求URL
 * @param string $request 请求中的请求报文主体
 * @param $wxMerchantId商户号
 * @param $certKey商户私钥
 * @param $wxApiSerialNo商户API证书序列号
 * @return string
 */
function RequestSign($method = "POST", $url = "", $request = "", $wxMerchantId,$certKey, $wxApiSerialNo)
{
    #截取获取当前请求地址【去除域名】
    $url_parts = parse_url($url);
    $path = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
    #获取当前时间戳
    $timeStamp = time();//echo $timeStamp."-----";
    #生成一个随机字符串
    $nonceStr =  $this->getNonceStr();//echo $nonceStr."-----";
    #构造签名串
    $requestSign = sprintf("%s\n%s\n%s\n%s\n%s\n", $method, $path, $timeStamp, $nonceStr, $request);
    //echo $requestSign."---";
    #计算计算签名值
    $sign = $this->calculateSignatureValue($requestSign, $certKey);
    #设置HTTP头获取Authorization
    $token = $this->createToken($wxMerchantId, $nonceStr, $timeStamp, $wxApiSerialNo, $sign);
    #返回
    return $token;
}

/**
 * 计算签名值
 * @param $requestSign
 * @param $certKey
 * @return string
 * 使用商户私钥对待签名串进行SHA256 with RSA签名,并对签名结果进行Base64编码得到签名值
 */
function calculateSignatureValue($requestSign, $certKey)
{
    $certKey = file_get_contents($certKey);
    openssl_sign($requestSign, $raw_sign, $certKey, 'sha256WithRSAEncryption');
    $sign = base64_encode($raw_sign);
    return $sign;
}

/**
 * 获取token
 * @param $merchant_id
 * @param $nonce
 * @param $timestamp
 * @param $serial_no
 * @param $sign
 * @return string
 */
function createToken($merchant_id, $nonce, $timestamp, $serial_no, $sign)
{
    //$schema = 'WECHATPAY2-SHA256-RSA2048';
    $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
        $merchant_id, $nonce, $timestamp, $serial_no, $sign);
    return $token;
}

/**
 * 产生随机字符串,不长于32位
 * @param int $length
 * @return string
 */
function getNonceStr($length = 32)
{
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

 弯路:让获取这个调用接口和下载这个平台证书,但是并没有用上,在网上命令下载出现报错,还是用的商户私钥,耗时1天

4、验签,耗时半天

 5、Native下单API调用代码

$url ="https://api.mch.weixin.qq.com/v3/pay/transactions/native";
$arr = array(
    'appid' =>$appid,
    'mchid' =>$mchid,
    'description' =>'订单',
    'out_trade_no' =>$orderNo,
    'attach' =>'pay',
    'notify_url' =>$notify_url,
    'amount' =>array(
        'total' =>floatval($money)*100,
        'currency' =>'CNY',
    )
);

$paramString = json_encode($arr,JSON_UNESCAPED_UNICODE); //转换为json格式

#获取authorization
$authorization = $this->RequestSign("POST", $url, $paramString, $mchid, $this->wxMerchantApiPrivateKey, $this->wxApiSerialNo);

//print_r($authorization);exit;

#调用curlPost获取下单二维码链接
$result = $this->curlPostWithWx($url,$arr,$authorization);print_r($result);exit;

总结:微信支付v3新版接口的对接难点在于生成签名和验签,解决了这个开发速度就加快了,官方文档写的不清楚,只能自己摸索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始学Android开发期末复习重点

目录 前言作业&#xff11;作业&#xff12;作业&#xff13;作业4作业5作业6 前言 物联网应用技术课程期末复习重点——学习通作业&#xff1a; 操作系统&#xff1a;Ubuntu22.04 作业&#xff11; 简述Android系统架构。 Android 的系统架构和它的操作系统一样&#xff…

前端开发需要学什么?零基础前端学习路线看这一篇就够了!

是的&#xff0c;自学前端可以帮助您找到工作&#xff0c;参加培训是根据个人学习能力和经济实力来自己决定的。前端开发是一个相对容易入门的领域&#xff0c;并且许多人通过自学成功地找到了前端开发的工作。以下是好程序员的一些建议&#xff0c;可以帮助您在自学前端时提高…

离线语音控制新方案,NRK3303语音识别芯片在智能风扇的应用

随着科技的不断发展&#xff0c;智能家居已经成为人们日常生活中不可或缺的一部分&#xff0c;涌现出越来越多的智能设备&#xff0c;如智能门锁、智能灯泡、智能冰箱等&#xff0c;这些设备为人们的生活带来了更多的便利和创新。其中作为常见的风扇通过添加智能语音控制功能&a…

分布式运用之Filebeat+Kafka+ELK 的服务部署

1. Kafka 架构深入了解 1.1 Kafka 工作流程及文件存储机制 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic 的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xff0c;每个 parti…

路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于哈里斯鹰优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于哈里斯鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

leetcode 2.两数相加(链表操作)

题目描述跳转到leetcode 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0…

消除字母-第14届蓝桥杯省赛Scratch中级组真题第6题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第141讲。 消除字母&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第6题&#xf…

Windows提权:利用MySQL数据库

目录 数据库提权的基本条件 MySQL UDF提权 什么是UDF UDF如何应用到提权 利用思路 MSF提权实战 MySQL 启动项提权 原理&#xff1a;通过MySQL数据库把木马写到Windows启动项中 Windows启动项位置 MSF提权利用实战 MySQL 反弹shell提权 数据库提权的基本条件 知道数据…

路径规划算法:基于鸟群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于鸟群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于鸟群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法鸟群…

Linux:centos:计划任务管理《at》

date 查看当前时间或管理时间 年-月-日 周几 时间 时间标准 如果想把他改成2024年6月1日12&#xff1a;30 使用 date 060112302024 06 6月 01 1日 1230 12&#xff1a;30 2024 2024年 使用at之前要安装他 有些用户没有安装的情况下 最好使…

死锁的成因和解决方案

死锁&#x1f512;的成因和解决方案&#x1f4d1; 锁是操作系统和程序语言中常用的同步机制&#xff0c;用于保证共享资源的互斥访问&#xff0c;防止多个线程或进程同时访问共享资源&#xff0c;导致数据不一致或程序崩溃。 死锁是我们在进行并发编程中需要时刻避免的一个问…

路径规划算法:基于引力搜索优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于引力搜索优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于引力搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

iPhone遇到错误53该如何快速修复?

在所有手机中&#xff0c;iphone是出现问题较少的一款手机&#xff0c;但有时候用户会偶尔遇到一些系统问题。例如&#xff0c;错误53是许多用户常见反馈问题之一。如果你还得到错误53 今天小编的就分享如果iphone遇到系统错误53的解决办法。 当我们尝试通过iTunes工具来恢复或…

TDengine 时序数据的保留策略

“TDengine除vnode分片之外&#xff0c;还对时序数据按照时间段进行分区。每个数据文件只包含一个时间段的时序数据&#xff0c;时间段的长度由DB的配置参数days决定。这种按时间段分区的方法还便于高效实现数据的保留策略&#xff0c;只要数据文件超过规定的天数&#xff08;系…

win10 Mysql8.0以上重置初始密码

第一步&#xff1a;关闭Mysql服务 首先&#xff0c;确保自己已经关闭了Mysql的服务 net stop mysql 问题&#xff1a;关闭时报错 原因是&#xff1a;因为net start 服务名&#xff0c;启动的是win下注册的服务。此时&#xff0c;系统中并没有注册mysql到服务中。即当前路径下…

【社区图书馆】《深入理解高并发编程:JDK核心技术》读后感

作者简介 首先要隆重介绍的肯定是《深入理解高并发编程&#xff1a;JDK核心技术》的作者&#xff1a;冰河&#xff0c;作为互联网资深技术专家、数据库技术专家、分布式与微服务架构专家。他多年来一直致力于分布式系统架构、微服务、分布式数据库、分布式事务与大数据技术的研…

【P41】JMeter 简单控制器(Simple Controller)

文章目录 一、简单控制器&#xff08;Simple Controller&#xff09;参数说明二、测试计划设计 一、简单控制器&#xff08;Simple Controller&#xff09;参数说明 该组件&#xff0c;是一个占位符&#xff0c;用于脚本模块化管理&#xff0c;无任何逻辑作用&#xff0c;也不…

0604嵌套路由与路由传参-react路由-react

文章目录 1 嵌套路由1.1 使用1.2 总结 2 路由传参2.1 示例准备2.1 传递params参数2.2 传递search参数2.3 传递state参数2.4 路由参数总结 结语 1 嵌套路由 1.1 使用 示例效果如下图1.1-1所示&#xff1a; 该示例代码其他部分和上一篇相同&#xff0c;这里主要讲解下嵌套路由的…

CVPR2023 I NeRF-Supervised Deep Stereo:不需要任何ground-truth数据

论文题目:NeRF-Supervised Deep Stereo 作者:Fabio Tosi ;Alessio Tonioni; Daniele De Gregorio等人 作者机构:University of Bologna(博洛尼亚大学);Google Inc(全球最大的搜索引擎之一);Eyecan.ai(韩国专注于开发眼动追踪技术的公司) 在公众号「3D视觉工坊」后台回复「…

老电脑重生:深度剖析各部件的羁绊关系

目录 引言&#xff1a; 正文&#xff1a; 主板&#xff1a; CPU 参数&#xff1a; 分类 接口 intel CPU升级推荐 AMD CPU升级推荐 CPU散热器&#xff1a; 内存条 硬盘 独立显卡 电源 机箱 总结 引言&#xff1a; 在科技日新月异的时代&#xff0c;我们与…