iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >tp6微信支付apiv3
  • 396
分享到

tp6微信支付apiv3

php 2023-09-03 21:09:53 396人浏览 八月长安
摘要

公司要整一个扫码支付然后有个后台能查看交易记录,然后百度搜寻,决定使用laytp2.0框架搭后台。   参考了以下文档: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.

公司要整一个扫码支付然后有个后台能查看交易记录,然后百度搜寻,决定使用laytp2.0框架搭后台。

  参考了以下文档:

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml

​​​​​​https://github.com/wechatpay-apiv3/wechatpay-php

https://www.laytp.com/doc/laytp/1.html

配置啥的不阐述了,代码大致流程:获取code,code获取openid,jsapi下单获取prepay_id,然后配置支付参数组装验签,调用微信支付,支付成功后回调,成功跳转页面。

前端代码:

fORM.on('submit(pay)', function (data) {    var buttonAnim = layui.button.load({elem: '.pay'});    //判断有没有code    var code = GetQueryString('code');    //有code    if (code !== undefined && code !== '' && code !== null) {        var openid = GetQueryString('openid');        data.field.openid = openid;        $.ajax({            url: '/payment.wechat/jsApiPay',            type: 'post',            dataType: 'JSON',            contentType: "application/json",            data: JSON.stringify(data.field),            success: function (inf) {                if (inf.code === 0) {                    let order = inf.data                    $.get('/payment.wechat/payConfig',                    {prepay_id: inf.data.prepay_id},                    function (sign) {                        WeixinJSBridge.invoke('getBrandWCPayRequest', sign,                         function(res){if (res.err_msg == "get_brand_wcpay_request:ok") {    window.location.href='xxxxxxxx/wechatSuccess.html?amount='+order.amount+'&out_trade_no='+order.order_sn+'&success_time='+order.create_time;} else if (res.err_msg == 'get_brand_wcpay_request:cancel') {    alert('支付已取消');} else {    alert(JSON.stringify(res));}                        });                    })                } else {                    console.log(res.code)                    console.log(res.msg)                }            }          })    } else {        //没有code        //微信获取code        $.ajax({            url: '/payment.wechat/getCode',            type: 'get',            dataType: 'json',            contentType: "application/json",            crossDomain: true,            success: function (res) {                console.log(res)            }        });    }    buttonAnim.stop();    return false;});//截取当前路径的参数function GetQueryString(name) {    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");    var r = window.location.search.substr(1).match(reg);    if (r != null) {        //解决中文乱码        return decodeURI(r[2]);    }    return null;}

后端代码:

//获取codepublic function getCode(){    $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appid.'&redirect_uri='.urlencode('xxxxxx/payment.wechat/index').'&response_type=code&scope=snsapi_base&state=syno' . time() . '#wechat_redirect';    return redirect($url);}//获取openidpublic function index(){    //判断有没有code    $code = $this->request->param('code');    if (isset($code) && $code !== '') {        $wechatConfig = Config::get('wechat');        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appid . '&secret=' . $this->secret. '&code=' . $code . '&grant_type=authorization_code';        $res = curl($url); //正常返回 access_token、openid等参数        if (isset($res['openid'])) {            return redirect('/payment/wechat/?openid=' . $res['openid'] . '&code=' . $code);        } else {            return redirect('/payment/wechat/');        }    } else {        return redirect('/payment/wechat/');    }}//构造 APIv3 客户端实例public function APIv3(){    $merchantId = $this->mchid; // 商户号    // 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名    $merchantPrivateKeyFilePath = $this->keyCert;    $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);    // 「商户API证书」的「证书序列号」    $merchantCertificateSerial = $this->serialNo;    // 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名    $platformCertificateFilePath = $this->wechatpayCert;    $platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);    // 从「微信支付平台证书」中获取「证书序列号」    $platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);    // 构造一个 APIv3 客户端实例    $instance = Builder::factory([        'mchid' => $merchantId,        'serial' => $merchantCertificateSerial,        'privateKey' => $merchantPrivateKeyInstance,        'certs' => [$platformCertificateSerial => $platformPublicKeyInstance],    ]);    return $instance;}//JSAPI下单获取prepay_idpublic function jsApiPay(){    Db::startTrans();    try {        $parameter = request()->post();        //下单        $order = new Order();        $orderSn = "订单号";        $data = [            'appid' => $this->appid, //公众号的服务号APPID            'mchid' => $this->mchid, //商户号            'description' => $parameter['product_name'], //商品描述            'out_trade_no' => $orderSn, //商户订单号            'attach' => 'ceshi_'.time(), //附加数据,在查询API和支付通知中原样返回            'notify_url' => 'xxxxx/payment.wechat/notifyUrl', //异步接收微信支付结果通知的回调地址            'amount' => ['total' => $parameter['amount'] * 100], //订单总金额,单位为分            'payer' => ['openid' => $parameter['openid']]  //用户标识,用户在直连商户appid下的唯一标识        ];        $instance = $this->APIv3();        $resp = $instance->chain('v3/pay/transactions/jsapi')->post(['json' => $data]);             $prepay_id = json_decode($resp->getBody(), true)['prepay_id'];         if (isset($prepay_id)) {            $arr = [];            $arr['prepay_id'] = $prepay_id;            $arr['order_sn'] = $orderSn;            $arr['amount'] = $parameter['amount'];            $orderInfo = $order->where('order_sn',$orderSn)->find();            $arr['create_time'] = $orderInfo['create_time'];            Db::commit();            return $this->success('成功获取prepay_id', $arr);        } else {              throw new \Exception('获取prepay_id失败');        }    } catch (\Exception $e) {        Db::rollback();        // 进行错误处理    }//获取支付参数public function payConfig(){    $config = $this->sign(request()->get('prepay_id'));    return json($config);}//签名public function sign($prepay_id){    $merchantPrivateKeyFilePath = $this->keyCert;    $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath);    $params = [        'appId' => $this->appid,        'timeStamp' => (string)Formatter::timestamp(),        'nonceStr' => Formatter::nonce(),        'package' => 'prepay_id=' . $prepay_id,    ];    $params += ['paySign' => Rsa::sign(        Formatter::joinedByLineFeed(...array_values($params)),        $merchantPrivateKeyInstance    ), 'signType' => 'RSA'];    return $params;}//支付成功回调处理public function notifyUrl(){    $inBody = file_get_contents('php://input');// 请根据实际情况获取,例如: file_get_contents('php://input');    $apiv3Key = 'xxxxxx';// 在商户平台上设置的APIv3密钥    // 转换通知的JSON文本消息为PHP Array数组    $inBodyArray = (array)json_decode($inBody, true);    // 加密文本消息解密    $inBodyResource = AesGcm::decrypt($inBodyArray['resource']['ciphertext'], $apiv3Key, $inBodyArray['resource']['nonce'], $inBodyArray['resource']['associated_data']);    // 把解密后的文本转换为PHP Array数组    $inBodyResourceArray = (array)json_decode($inBodyResource, true);    if ($inBodyResourceArray['trade_state'] == 'SUCCESS') {        Db::startTrans();        try {            //操作付款状态            $order = new Order();            $order->update(['pay_status' => 1, 'pay_time' => date('Y-m-d H:i:s')], ['order_sn' => $inBodyResourceArray['out_trade_no']]);            //交易明细记录            $tradeRecord = new TradeRecord();            $tradeRecord->insertGetId([                'order_sn' => $inBodyResourceArray['out_trade_no'],                 'trade_no' => $inBodyResourceArray['transaction_id'],                 'total_amount' => $inBodyResourceArray['amount']['total'] / 100,                 'type' => 1, //0支出 1收入                 'pay_type' => 1, //0支付宝 1微信                 'content' => $inBodyResource,                 'trade_state' => $inBodyResourceArray['trade_state'],                 'create_time' => date('Y-m-d H:i:s')             ]);             $wechatTrade = new WechatTrade();             $wechatTrade->insertGetId([                 'order_sn' => $inBodyResourceArray['out_trade_no'],                 'transaction_id' => $inBodyResourceArray['transaction_id'],                 'trade_state' => $inBodyResourceArray['trade_state'],                 'openid' => $inBodyResourceArray['payer']['openid'],                 'trade_type' => $inBodyResourceArray['trade_type'],                 'total_amount' => $inBodyResourceArray['amount']['total'] / 100,                 'create_time' => date('Y-m-d H:i:s')             ]);             Db::commit();             //返回成功             echo ' ';            } catch (\Exception $e) {                Db::rollback();                // 进行错误处理                echo $e->getMessage(), PHP_EOL;            }        }    }

来源地址:https://blog.csdn.net/delzzz/article/details/128672843

--结束END--

本文标题: tp6微信支付apiv3

本文链接: https://www.lsjlt.com/news/392826.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • tp6微信支付apiv3
    公司要整一个扫码支付然后有个后台能查看交易记录,然后百度搜寻,决定使用laytp2.0框架搭后台。   参考了以下文档: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1....
    99+
    2023-09-03
    php
  • java微信小程序支付-回调(Jsapi-APIv3)
    一、接入前准备,按照这个文档准备        准备: 接入前准备-小程序支付 | 微信支付商户平台文档中心 准备好了就可以获得(第二点里需要的参数):         参数1 商户号 merchantId:xxxxxx(全是数字)    ...
    99+
    2023-09-06
    微信小程序 小程序 微信 java
  • 【微信支付】java-微信小程序支付-V3接口
    一、对接前准备 最开始需要在微信支付的官网注册一个商户; 在管理页面中申请关联小程序,通过小程序的 appid 进行关联;商户号和appid之间是多对多的关系 进入微信公众平台,功能-微信支付中确认关联 具体流程请浏览官方文档:接入前准备-...
    99+
    2023-10-27
    微信 微信小程序 小程序
  • 〔支付接入〕微信的 h5 支付和 jsapi 支付
    ✨ 目录 🎈 申请商户号🎈 申请商户证书🎈 设置APIv3密钥🎈 下载 SDK 开发包🎈 下载平台证书🎈 关联 AppID 账...
    99+
    2023-08-16
    微信支付 支付 H5支付 php 微信 经验分享 开发语言
  • PHP 微信支付V3
    使用 PHP 包管理工具 Composer 安装 SDK: composer require wechatpay/wechatpay 获取微信商户证书 参考地址:什么是商户API证书?如何获取商户API证书? 获取微信支付平台证书 在服务...
    99+
    2023-09-07
    php 微信
  • easywechat6 微信支付(v3)
    function jsApiCall(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { appId:'', timeStamp: "", //注意 ...
    99+
    2023-08-31
    php 开发语言 phpstorm
  • java微信支付v3系列——5.微信支付成功回调
    目录 java微信支付v3系列——1.微信支付准备工作 java微信支付v3系列——2.微信支付基本配置 java微信支付v3系列——3.订单创建准备操作 java微信支付v3系列——4.创建订单的封...
    99+
    2023-09-06
    微信 java 微信支付 微信支付v3
  • java对接微信支付:JSAPI支付成功之“微信回调”
    承接上一篇微信支付,现在简单说一下 微信支付回调 目录 一、支付回调 二、微信回调地址问题 1.本地/上线测试 2.控制器调用接口(代码) 总结 一、支付回调 当用户支付成功之后,支付平台会向我们指定的服...
    99+
    2023-09-02
    微信
  • PHP实现微信支付流程(Native支付)
    最近项目需要做微信支付的功能,想着把流程以及遇到的坑记录下来 1.到微信商户平台中去开通Native支付(产品中心-Native支付-申请开通) 2.微信商户平台中下载证书以及设置api密钥(账户中心-api安全),查看指引中很详细的说...
    99+
    2023-08-31
    php 微信 Powered by 金山文档
  • 小程序微信支付
    微信小程序实现支付功能 1. 准备工作 在开始实现微信小程序支付功能之前,我们需要先完成以下准备工作: 注册微信支付商户号,并完成商户资质审核;微信支付开发文档;在小程序中引入微信支付JSAPI;获取...
    99+
    2023-09-04
    小程序 微信 微信小程序
  • 微信支付V3 小程序支付API Java版
    本文目的:快速接通微信支付V3 无需关注细节,实现支付功能,修改配置即可调用 文章目录 接入准备微信支付流程整理(小程序版)一、导入微信支付扩展包二、微信支付工具类1.签名工具类2.微信...
    99+
    2023-10-27
    微信 小程序 java
  • vue项目中的支付功能实现(微信支付和支付宝支付)
    目录项目中常见的支付方式    支付宝支付微信支付项目中常见的支付方式     支付宝支付  &nbs...
    99+
    2024-04-02
  • Python3 微信支付(小程序支付)V3接口
    起因:         因公司项目需要网上充值功能,从而对接微信支付,目前也只对接了微信支付的小程序支付功能,在网上找到的都是对接微信支付V2版本接口,与我所对接的接口版本不一致,无法使用,特此记录下微信支付完成功能,使用Django完成后...
    99+
    2023-09-12
    微信 小程序 微信小程序
  • Flutter 仿微信支付界面
    目录带装饰效果的 ContainerRow 行布局和 Column列布局ListView列表组件GridView网格组件代码实现结语: 左侧是微信支付的界面,右侧是开发完成后的效果,...
    99+
    2024-04-02
  • PHP 实现微信支付 JSAPI
    目录 一、首先我们来填个坑 1:支付验签失败 二、代码示例 1.请求参数配置 2.统一下单API 3.MakeSign 签名 4.ToXml 数组参数转xml 5.postXmlCurl 发送请求 6.FromXml 结果xml参数转数组 ...
    99+
    2023-09-12
    php 微信 微信公众平台
  • java微信小程序支付
    这篇文章将为大家详细讲解有关java微信小程序支付,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java 微信小程序支付 前言 微信小程序支付是一种方便快捷的支付方式,它允许用户在微信小程序中直接进行支付...
    99+
    2024-04-02
  • 微信小程序支付java
    这篇文章将为大家详细讲解有关微信小程序支付java,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序支付 Java 实现 微信小程序支付提供了便捷的支付机制,使开发者能够轻松地在其小程序中集成支付功...
    99+
    2024-04-02
  • 微信小程序支付踩坑notify_url(支付回调)
    最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问。 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊。 把回调地址复制出来到浏览器上面,外网也是可以访问的啊。 然后我再分析,为什么以前公众号支付都...
    99+
    2023-09-20
    微信小程序 小程序 微信
  • 微信支付,JSAPI支付,APP支付,H5支付,Native支付,小程序支付功能详情以及回调处理
    一.支付相关文档地址 支付wiki: https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml 支付api: https://pay.weixin.qq.com/wiki/...
    99+
    2023-09-20
    微信 小程序 微信小程序 微信支付 Powered by 金山文档
  • PHP学习笔记:支付宝与微信支付集成
    导言:随着移动支付的普及和用户需求的增加,支付宝和微信支付成为了最常见的在线支付方式。在开发网上商城、在线支付平台等项目时,支付宝和微信支付的集成是必不可少的一部分。本文将重点介绍如何使用PHP语言集成支付宝和微信支付,并提供具体的代码示例...
    99+
    2023-10-21
    PHP 微信支付 支付宝
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作