微信支付JSAPI支付

2023-11-11

公司业务需求,在公众号中加入微信支付和支付宝支付 效果图如下:

这里写图片描述

菜单的设计直接在公众号中设置就好啦,两个子菜单都是跳转网页形式直接把你服务器上的url复制上就好。

一些其他的很重要的配置:

微信支付中开发配置 支付测试url

这里写图片描述

这里是报错

这里写图片描述

开始以为是域名没有备案什么的,不要慌,要再写一级目录才可以,同时开发的时候别忘记把自己加入测试白名单。 一不小心微信号曝光了,有问题的可以加微信交流

这里写图片描述

用户进行微信支付的是后首先要进行用户授权登录的,程序的角度就是拿到用户的openid

这里写图片描述

这里写图片描述

还有两个加密证书要登录微信支付的商户号进行下载后放到项目中 配置还要一些appid,appscret直接粘贴到项目config就可以啦

代码说明:

具体的代码我是用php编写的两个支付项目都集成到thinkphp框架中啦
JSAPI支付的大体流程是:用户访问后授权登录(这个授权有时是静默授权就是不会询问你)然后拿到用户对于本公众号的唯一用户id 也就是openid(虽说你是用你自己的域名服务器做支付但其实还是跟你的公众号有直接关联的),后端(php)拿到openid后在加上一些必要的订单信息按相应的签名算法拼接成一个sign(就相当于与微信端交互的一把钥匙、密码),之后把交易信息加上sign发给微信端进行支付请求

    require_once "/wxpay/lib/WxPay.Api.php";
    require_once "/wxpay/test/WxPay.JsApiPay.php";
    require_once '/wxpay/test/log.php';
    $tools = new \JsApiPay();
    // $openId = $tools->GetOpenid();
    $input = new \WxPayUnifiedOrder();
    $openId = session('openId');
    $input->SetBody("test");
    $input->SetAttach("test");
    // $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
    $input->SetOut_trade_no($out_trade_no);
    $input->SetTotal_fee("$total_amount");
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetGoods_tag("test");
    $input->SetNotify_url("http://myalipay.ittun.com/wxpay/example/notify.php");
    $input->SetTrade_type("JSAPI");
    $input->SetOpenid($openId);
    $order = \WxPayApi::unifiedOrder($input);
    $jsApiParameters = $tools->GetJsApiParameters($order);
    // var_dump($jsApiParameters);die;
    echo "$jsApiParameters";die;

根据业务需要我这里写的是一个ajax接口,用于前端获取交易的信息,这里的$jsApiParameters本事就是一个json字符串,所以就不需要在进行json转换了,转换后会出现参数错误,具体参数如下:
string(222) “{“appId”:”wxbe9e6d43b4206f77”,
“nonceStr”:”b58ncc5n7i2xwbvdeidkx2h2ctoyg5ay”,
“package”:”prepay_id=wx201704141126330a11b5b4430487803422”,
“signType”:”MD5”,”timeStamp”:”1492140457”,
“paySign”:”794FC7A3C811E40CA8D826FD48AB3BD9”}”

下面是前端拿到数据后的一些操作:

       var jsapi;
       ajax({
                       url:'/index.php/home/order/wxpayed',
                       type:'post',
                       data:{
                           'product_id':aLa[iNow].id,
                           'product_name':oH
                       },success:function (str) {
                           var str=eval('('+str+')');
                          //  edit = str.editl;
                           jsapi = str;

                           console.log(str);
                           callpay();
                       }
                   })
                }

                function jsApiCall()
                {
                  alert(jsapi)
                    WeixinJSBridge.invoke(
                        'getBrandWCPayRequest',
                        jsapi,
                        function(res){
                            WeixinJSBridge.log(res.err_msg);
                            alert(res.err_code+res.err_desc+res.err_msg);
                        }
                    );
                }

                function callpay()
                {
                    if (typeof WeixinJSBridge == "undefined"){
                        if( document.addEventListener ){
                            document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                        }else if (document.attachEvent){
                            document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                            document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                        }
                    }else{
                        jsApiCall();
                    }
                }

拿到后端传来的交易信息后,把它赋值给全局变量jsapi然后通过jsapi带入到jsApiCall()函数中
在ajax success后,调起callpay()函数而此时微信支付就会被成功唤起

遇到的bug:

把一个官方sdk集成到thinkphp框架中,需要注意一些文件引入问题,明明成功引入文件却不能实例化文件中的对象,最后google找到了问题的答案,这就是我代码中new 一个类名前加一个 “\”的原因 。$input = new \WxPayUnifiedOrder();

在获取到交易信息后传到前端的时候,按以往的思维方式json_encode后就报了错误

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信支付JSAPI支付 的相关文章

  • 2021-10-04

    Centos 7安装Notepad 安装snap sudo yum install epel release sudo yum install snapd sudo systemctl enable now snapd socket sud
  • 使用TWRP Recovery刷入CM13等第三方ROM教程

    http www miui com thread 4492914 1 1 html 首先 可以使用论坛里发布的中文TWRP或者我改的http www miui com forum php mo page 1 pid124770869里的中文
  • 巧解高并发之消息压缩

    随着互联网的发展 高并发问题几乎是每个企业都会面临的问题 而目前解决高并发最受欢迎的便是微服务 通过类似于增加服务器数量而达到一种 人多力量大的 效果 而解决这类问题除了增加 人 的数量 还可以精简任务 降低繁琐度 那么目标就到了消息上 既
  • 量化投资学习——一些牛比的量化投资公司

    Jane Street Jane Street是华尔街最神秘的交易公司 以关注科技和股票交易而闻名 去年他们总交易额达到了5万亿美元 Jane Street公司成立于2000年 目前拥有600多名员工 每天股权交易量高达130亿美元 有消息
  • 多线程造成的资源以及系统状态问题 ==> 多线程造成状态混乱 :参考文章

    为什么80 的码农都做不了架构师 gt gt gt 实战体会Java多线程编程精要 在 Java 程序中使用多线程要比在 C 或 C 中容易得多 这是因为 Java 编程语言提供了语言级的支持 本文通过简单的编程示例来说明 Java 程序中
  • jeesite图片上传并显示

    前几天大哥叫我搞个这的需求出来 上传图片并展示出来 并且后台对图片进行裁剪上传 前端传来的图片是个base64的编码 格式的图片 点击新增 点击上传图片 可进行裁剪 然后上传并且展示出来 前端form页面附上 记住 path路径一定要对上
  • jmeter

    我整理了一下性能测试的一些常见指标 大家看看还有没有需要完善的 性能测试是评估系统在特定工作负载下的能力和可靠性的过程 常见的性能测试指标包括以下几种 1 响应时间 Response Time 系统从接收请求到返回响应所需的时间 2 吞吐量
  • 一文读懂运放规格书参数(2)

    1 电源抑制比 Power supply rejection ratio PSRR 定义 双电源供电电路中 保持负电源电压不变 输入不变 而让正电源产生变化幅度为 VS 频率为 f 的波动 那么在输出端会产生变化幅度为 Vout 频率为 f

随机推荐

  • IEEEE trans模板中怎么使用algorithm2e

    IEEEE trans模板中怎么使用algorithm2e 本文主要记录如何在IEEEE trans模板中使用algorithm2e 避免踩坑 找不到解决方案 目录 IEEEE trans模板中怎么使用algorithm2e 1 注释掉该注
  • 2003系统internet信息服务器,WindowsServer2003创建和管理Internet信息服务器.docx

    F图 F图 Windows Server 2003 实训报告 班级 软件设计10 2姓名学号得分 实训九 创建和管理In ternet信息服务器 实训目的 掌握Web FTP服务器的配置 实训环境 1 装有 Windows Server 2
  • pssh远程批量执行命令

    Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具 它的用法可以媲美ansible的一些简单用法 执行起来速度比ansible快它支持文件并行复制 远程命令执行 杀掉远程主机上的进程等等 杀手锏是文件并行复制 当进行
  • 【Spring Boot】详解restful api

    目录 1 restful api 1 1 历史 1 2 内容 1 3 传参 2 Spring Boot中的Restful Api 1 restful api 1 1 历史 RESTful API Representational State
  • netty入门实例

    Netty 5用户指南 http ifeve com netty5 user guide Netty是一个NIO框架 使用它可以简单快速地开发网络应用程序 比如客户端和服务端的协议 Netty大大简化了网络程序的开发过程比如TCP和UDP的
  • PCL 获取格网最低点(C++详细过程版)

    格网最低点 一 概述 二 代码实现 三 结果展示 1 原始点云 2 滤波结果 一 概述 获取格网最低点在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL GridMinimum获取栅格最低点 为充分了解GridMinimum算法实
  • Mysql binlog 日志

    Mysql binlog 日志 一 Binlog格式介绍 模式1 Row 日志中会记录成每一行数据被修改的形式 然后在slave端再对相同的数据进行修改 优点 row level模式下 bin log中可以不记录执行的sql语句的上下文相关
  • p-value,q-value,FDR

    假阴性错误 false negative errors 高水平的基因可能偶尔没有检测到 假阳性错误 false positive errors 低水平表达的基因由于扩增偏差 可能显得过于丰富 导致假阳性错误 错误发现率 False Disc
  • SQL语句常用记录_count()常用用法以及和group by的组合用法

    之前听大佬说过 会学习的人将资料写下来 不会学习的人妄想将资料记到脑子里 我觉得还是有一定道理的 好记性不如烂笔头 以此篇博客记录我在实际开发中常用到的sql语句 方便以后查看 相信很多用过sql的人 谈到sql语句第一时间想到的就是 se
  • js动态控制表单的tr,td的显示和隐藏

    无论是事先写好的 还是动态生成的 要找到指定的tr或td都必须知道其相关的一个属性 未必必须是id或name 然后无论是在一个table还是多个 table都可以通过document getElementsByTagNames tr 或td
  • 排序算法学习之路——快速排序

    快速排序是由东尼 霍尔所发展的一种排序算法 在平均状况下 排序 n 个项目要 n log n 次比较 在最坏状况下则需要 n2 次比较 但这种状况并不常见 事实上 快速排序通常明显比其他 n log n 算法更快 因为它的内部循环 inne
  • openGL之API学习(一零四)原子计数 Atomic Counters atomic_uint

    原子计数器 Atomic counters 是OpenGL4 2的新功能 能够用于渲染管线的各个阶段 完整的文档规范说明在GL ARB shader atomic counters 原子计数器是一块缓冲区 缓冲区对象 存放了一个或多个整型
  • 重磅直播丨迈向移动数字金融 —— 神州信息并购云核网络线上发布会

    关注神州信息官微 点击底部菜单栏及时关注
  • Vue3的常见30道核心面试题,会vue3的你,是不是的掌握了

    1 什么是Vue3 Vue3有哪些新增特性 答 Vue3是Vue js框架的最新版本 它增加了很多新特性 包括Composition API Teleport Suspense 和Fragment等 2 Vue3 Composition A
  • 第三节:数据类型——Object对象

    Object对象 由属性构成的无序集合 1 对象与原始类型的区别 对象有属性 对象对应的值可以是原始数据类型也可以是对象 对象的属性和对应的值这种表示方式称之为键值对 属性名又称之为键名 值称之为键值 键值可以是原始数据类型也可以是对象 也
  • 华为机试:统计大写字母个数

    一 题目 描述 找出给定字符串中大写字符 即 A Z 的个数 输入描述 本题含有多组样例输入 对于每组样例 输入一行 代表待统计的字符串 输出描述 对于每组样例 输出一个整数 代表字符串中大写字母的个数 二 输入输出示例 三 代码 incl
  • CPU与GPU计算耗时对比

    下面我们测试了分别使用CPU和GPU执行矩阵乘法得到的耗时差异 运行结果如下 注意 上面的运行揭示了下面几点 cpu c的第一次计算耗时明显超过后面的3次 gpu c的第一次计算耗时明显大大超过后面3次 GPU运行耗时差不多是CPU的1 1
  • shell-test判断

    一 条件判断参数详解 对于test和 中括号 判断语句来说 判断结果为真 则退出值为0 即echo 为0 即返回为true 其他为false 1 关于文件名 文件类型 的判断 e 该 文件名 是否存在 文件和目录都会返回为真 f 该 文件名
  • 基于docker安装mongo

    1 背景 基于业务的需求 部分数据量较大 基本一天的数据量都在1亿左右 关系型数据库已经满足不了了要求 所以更换为非关系型数据库 当然非关系型数据库的种类有很多 我们选择的是mongo 要想了解熟悉mongo 不能只做书面上的功夫 必须较强
  • 微信支付JSAPI支付

    公司业务需求 在公众号中加入微信支付和支付宝支付 效果图如下 菜单的设计直接在公众号中设置就好啦 两个子菜单都是跳转网页形式直接把你服务器上的url复制上就好 一些其他的很重要的配置 微信支付中开发配置 支付测试url 这里是报错 开始以为