H5公众号调用v2jsapi使用微信支付-PHP后端

前端示例代码

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>微信支付</title><script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script><script src="https://s.url.cn/qqun/qun/qqweb/m/qun/confession/js/vconsole.min.js "></script><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script><style type="text/css" media="all">body{width: 300px;height: 200px;border: 1px solid  red;}#payButton{width: 200px;height: 250px;}</style>
</head>
<body>
<button id="payButton">支付</button><script>
$(document).ready(function(){$("#payButton").click(function(){var openid = 'xxxxxxxxx';var total_fee = 1; // 金额,单位:分var body = '商品描述';// 发起统一下单请求$.ajax({type: "POST",url: "/api/wechat_pay.php",data: {openid: openid, total_fee: total_fee, body: body},dataType: "json",success: function(response){console.log(response);// 调用WeixinJSBridge拉起支付if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId": response.appId,     // 公众号ID,由商户传入"timeStamp": response.timeStamp,  // 时间戳,自1970年以来的秒数"nonceStr": response.nonceStr, // 随机串"package": response.package,"signType": "MD5",         // 微信签名方式"paySign": response.paySign  // 微信签名},function(res) {if (res.err_msg == "get_brand_wcpay_request:ok") {// 用户支付成功console.log("用户支付成功");} else {// 用户支付失败或取消支付console.log("用户支付失败或取消支付");console.log(res);}});}}});});
});
</script></body>
</html>

PHP后端代码

<?php
// wechat_pay.php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {$openid =  $_POST['openid'];;$total_fee = $_POST['total_fee']; $body = $_POST['body'];if($openid!='' && $total_fee!=''){$out_trade_no = 'order' . date('Ymd') . substr(str_replace('.', '', microtime(true)), 0, 13);unifiedOrder($openid, $out_trade_no, $total_fee, $body);}
}
// 定义统一下单函数
function unifiedOrder($openid, $out_trade_no, $total_fee, $body){$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";$appid = '';//appid$mch_id = '';//商户号$V2apikey = '';//V2apikey// 构建统一下单参数$data = array('appid' => $appid,'mch_id' => $mch_id,'nonce_str' => md5(uniqid()), // 随机字符串'body' => $body,'out_trade_no' => $out_trade_no,'total_fee' => $total_fee,'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 客户端IP'notify_url' => 'httsps://xxxxx/api/notify.php', // 支付结果回调接口地址'trade_type' => 'JSAPI', // 支付类型'openid' => $openid,);// 参数按字典序排序ksort($data);// 生成签名$string = '';foreach ($data as $key => $value) {if($value!=""){$string .= $key.'='.$value.'&';}        }$stringSignTemp=$string."key=".$V2apikey; $sign = strtoupper(md5($stringSignTemp)); // 签名,转为大写$data['sign'] = $sign;// 数组转xml格式$xmlData = '<xml>';foreach ($data as $key => $value) {$xmlData .= '<'.$key.'>'.$value.'</'.$key.'>';}$xmlData .= '</xml>';// 发起请求$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);$output = curl_exec($ch);curl_close($ch);// 处理返回结果$result = simplexml_load_string($output, 'SimpleXMLElement', LIBXML_NOCDATA);if($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){$prepay_id = $result->prepay_id;$config = array('appId' => $appid,'timeStamp' => strval(time()),'nonceStr' => md5(uniqid()), // 随机字符串'package' => 'prepay_id='.$prepay_id,);// 参数按字典序排序ksort($config);// 生成签名$sign = md5("appId={$config['appId']}&nonceStr={$config['nonceStr']}&package={$config['package']}&signType=MD5&timeStamp={$config['timeStamp']}&key=".$V2apikey);$config['paySign'] = $sign;$config['$stringSignTemp'] = $stringSignTemp;echo json_encode($config);} else {echo json_encode(array('error' => '支付失败','data'=>$result));}
}?>

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

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

相关文章

Flutter 滚动布局:sliver模型

一、滚动布局 Flutter中可滚动布局基本都来自Sliver模型&#xff0c;原理和安卓传统UI的ListView、RecyclerView类似&#xff0c;滚动布局里面的每个子组件的样式往往是相同的&#xff0c;由于组件占用内存较大&#xff0c;所以在内存上我们可以缓存有限个组件&#xff0c;滚动…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列&#xff08;RAID&#xff09;5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层&#xff0c;接…

【JavaEE】网络原理

网络原理 1. 网络发展史 1.1 独立模式 每个计算机都相互独立&#xff0c;各个终端无法实现相互通信&#xff0c;当想要运行其他数据时&#xff0c;只能进行更换电脑。 1.2 网络互连 通过网络将多台设备连接在一起&#xff0c;完成数据共享。 1&#xff09;局域网LAN 即Lo…

【C++修行之道】竞赛常用库函数(sort,min和max函数,min_element和max_element、nth_element)

目录 一、sort 1.1sort简介 语法 参数 功能 适用容器 1.2sort的用法 1.3自定义比较函数 示例 1265蓝桥题 —— 排序 二、min和max函数 三、min_element和max_element 497蓝桥题 —— 成绩分析 四、nth_element 一、sort 1.1sort简介 sort函数包含在头文件<a…

Vue3组件库开发 之Button(2) 未完待续

Vue3组件库开发 之Button(1) 中新建项目&#xff0c;但未安装成功ESLINT 安装ESLINT npm install eslint vite-plugin-eslint --save-dev 安装eslint后&#xff0c;组件文件出现错误提示 添加第三方macros &#xff0c;虽然不是官网但很多开发者都是vue3开发人员 安装macros…

C++大学教程(第九版)6.29素数

题目 (素数)素数是只能被1和自已整除的整数。例如,235和7是素数而468和9不是素数 a)编写一个函数&#xff0c;确定一个数是否是素数。 b)在程序中使用这个函数&#xff0c;该程序确定和打印2 ~10000之间的所有素数。在确信已找到所有的素数之前&#xff0c;实际需测试这些数中…

基于PSO-BP神经网络的风电功率预测(MATLAB)

作品简介 &#xff1a;关注公众号“电击小子程高兴的MATLAB小屋”获取优惠 主要内容 该模型将粒子群算法与BP神经网络结合用于BP神经网络的训练&#xff0c;即优化BP网络中的连接权值和各项阈值&#xff0c;然后利用神经网络分布式并行处理优势、自适应学习能力以及较好的…

c++中的包装器 function

文章目录 前言包装器 function及模板的低效性修复问题 前言 C提供了多个包装器&#xff08;wrapper&#xff0c;也叫适配器adapter&#xff09;。这些对象用于给其他编程接口提供更一致或更合适的接口。 bind1st和bind2ed就是两个适配器&#xff0c;它们让接受两个参数的函数…

mysql学习打卡day16

今日成果&#xff1a; select c.customer_id,c.first_name,c.points, Bronze as typefrom customers cwhere c.points < 2000unionselect c.customer_id,c.first_name,c.points, Silver as typefrom customers cwhere c.points between 2000 and 3000 unionselect c.custom…

【.NET Core】多线程之线程池(ThreadPool)详解(二)

【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;二&#xff09; 在上一篇《【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;一&#xff09;》中我们详细讲解了&#xff0c;线程池概念&#xff0c;如何应用及…

三、需求规格说明书(软件工程示例)

1&#xff0e;引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2&#xff0e;任务概述 2.1目标 2.2运行环境 2.3条件与限制 3&#xff0e;数据描述 3.1静态数据 3.2动态数据 3.3数据库介绍 3.4数据词典 3.5数据采集 4&#xff0e;功能需求 …

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现定时器

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 文章目录 一、定时器(1) 简介STM32定时器计算公式 (2) 示例代码&#xff08;基本定时功能&#xff09;(3) 仿真效果 &#xff08;基本定时功能&#xff09;(4) 示例代码&#xff08;PWM 呼吸灯&#xff09…

修改Linux 分区 UUID

注意事项修改磁盘 uuid 的时候&#xff0c;磁盘不能被挂载需要先卸载 #/dev/sdb5 硬盘设备分区名称 sudo umount /dev/sdb5 生成UUID的命令[不适合NTFS nfs等windows格式] uuidgen 查看硬盘分区设备名字以及UUID的命令 blkid 修改 exit 2 3 4 #!/bin/bash MY_UUID$(uuidge…

美易makeasy平台:小米汽车雄心勃勃

正文&#xff1a; 在当今这个科技飞速发展的时代&#xff0c;不断有企业家提出宏伟的目标&#xff0c;引领行业向前迈进。近日&#xff0c;小米集团创始人雷军在社交平台上转发央视财经关于小米汽车的报道&#xff0c;并宣布了一个令人瞩目的目标&#xff1a;通过15到20年的不…

【GitHub项目推荐--12306 抢票助手 python】【转载】

这个项目名很干脆&#xff0c;不知道以为是 12306 网站的源码&#xff0c;其实不是这是全 GitHub最德高望重的抢票小助手&#xff0c;功能一直在更新&#xff0c;且现已支持 Python 3.6 以上版本。 开源地址&#xff1a;https://github.com/testerSunshine/12306

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册&#xff0c;参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…

【Java】Maven的安装与配置

初识Maven Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09; 提供了一套依赖管理机制 标准化的…

质疑鸿蒙系统的是什么人群?为什么要杠

《HarmonyOSNEXT星空版》已堵住大部分人质疑的嘴。就在本月1月18&#xff0c;华为鸿蒙生态千帆启航仪式正式&#xff0c;HarmonyOSNEXT鸿蒙星河版发布&#xff1a;全面自研。 架构层面&#xff0c;HarmonyOSNEXT不依赖传统的Unix内核和Linux内核&#xff0c;而是实现了AI大模型…

《高教学刊》是什么级别的期刊?是正规期刊吗?是核心期刊吗?

​标题解答 1、《高教学刊》是什么级别的期刊&#xff1f; 省级 2、《高教学刊》是核心期刊吗&#xff1f; 不是&#xff0c;只是封面有核心字样 《高教学刊》刊发高等教育教学与高教理论研究成果&#xff0c;交流高校教学与建设的改革措施和实践经验&#xff0c;探索高等教…

每天五分钟计算机视觉:掌握迁移学习使用技巧

本文重点 随着深度学习的发展,迁移学习已成为一种流行的机器学习方法,它能够将预训练模型应用于各种任务,从而实现快速模型训练和优化。然而,要想充分利用迁移学习的优势,我们需要掌握一些关键技巧。本文将介绍这些技巧,帮助您更好地应用迁移学习技术。 迁移学习的关键…