当前位置:首页 > 技术教程 > 技术文章 > 正文内容

ThinkPHP框架整合微信支付统一下单接口之Native扫码支付模式

atao3年前 (2021-02-25)技术文章3161

此篇文章主要介绍了ThinkPHP6框架下整合微信支付之Native

手册里面有的东西不多介绍,请求参数、返回结果之类的请移步官方手册查看。本文主要是通过一个demo实例进行讲解微信支付之统一下单接口。

手册地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

微信支付统一下单接口流程介绍:

  1. 将基本请求参数和随机字符串(见下文)写入到数组

  2. 生成签名(按照字典序排序)写入数组

  3. 将数组转为xml包

  4. 提交CURL请求(POST)

  5. 微信返回数据

生成随机字符串方法和签名生成方法见下文微信支付类下载地址。

微信支付统一下单接口必填请求参数:

  1. appid 公众号ID

  2. mch_id 商户号

  3. nonce_str 随机字符串

  4. body 商品描述

  5. out_trade_no 商户订单号

  6. total_fee 标价金额(单位为分)

  7. spbill_create_ip 终端IP

  8. notify_url 通知地址

  9. trade_type 交易类型

  10. sign 签名

至于请求参数为什么和微信官方手册不一样?因为手册长时间不更新可能存在错误,用户可自行测试。

此方法一共涉及两个类文件,分别为WxPay(微信支付类)和QRcode(二维码类),下载地址见下文。

// 发起NATIVE支付实例
public function pay(){
    $order_sn = "wx202102051234"; //订单编号
    $money = "0.01"; //价格
    $title = "东北大鸭梨"; //标题
    $notify = "http://wx.yizhanhongtu.cn/index/Login/notify"; //回调地址
    // 实例化微信支付类,并传入参数
    $wx = new WxPay($notify); // 传入回调地址
    $content = $wx->prepay("",$order_sn,$money,$title,"NATIVE");
    // 生成二维码
    QRcode::png($content['code_url']);
    // 将流放到缓存区,并且base64加密
    $imageString = base64_encode(ob_get_contents());
    ob_end_clean(); // 结束流
    // 输出文件
    return $imageString;
}

// 微信支付回调结果
public function notify(){
    // 实例化支付类,并传入参数
    $wx = new WxPay("");
    $content = $wx->PayNotify(file_get_contents("php://input")); //获取到微信返回的数据
    // 继续执行业务流程修改订单状态
    $arr=['pay_sn'=>"{$content['transaction_id']}",'status'=>"20"];
    $rt = Db::table("lr_order")->where('order_sn',$content['out_trade_no'])->update($arr);
}

前台怎么显示图片:

<img src='data:image/png;base64,返回的base64图片编码' />

image.png


文章:微信支付类下载二维码类下载

扫描二维码推送至手机访问。

版权声明:本文由武景涛的博客发布,如需转载请注明出处。

本文链接:http://yizhanhongtu.cn/post/57.html

分享给朋友:

相关文章

超强的随机语录API接口,免费调用

超强的随机语录API接口,免费调用

API[ReplyVisible]http://yizhanhongtu.cn/api/api.php?type=1&text=json[/ReplyVisible] 支持协议:HT...

file_get_contents很慢?来看看php访问url的四种方式

file_get_contents很慢?来看看php访问url的四种方式

在使用file_get_contents方式访问URL的时候,会导致速度变的很慢,据说这是file_get_contents的一个bug,本文主要介绍PHP引入url的四种方式,其中包括file_ge...

CSS度量的单位px、rem、em、vw、vh有什么区别

CSS度量的单位px、rem、em、vw、vh有什么区别

1、px绝对单位,页面按精确像素展示2、em相对长度单位,相对于当前对象内文本的字体尺寸, 根据父元素的大小变化而变化对单位,基准点为父节点字体的大小。em是指字体高度 浏览器默认1em=16px,所...

PHP开发api接口,如何做才算是安全的

PHP开发api接口,如何做才算是安全的

php的api接口在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,...

MySQL中,21个写SQL语句的好习惯

MySQL中,21个写SQL语句的好习惯

每一个好习惯都是一笔财富,本文分 SQL 后悔药、SQL 性能优化、SQL 规范优雅三个方向,分享写 SQL 的 21 个好习惯。1. 写完 SQL 先 explain 查看执行计划。【SQL 性能优...

thinkphp6资源路由解决同源策略、跨域问题。

thinkphp6资源路由解决同源策略、跨域问题。

一般开发接口资源请求服务端都会遇到跨域请求。在跨域请求的时候,明明设置的是POST请求,却请求的时候报跨域错误,检查http请求头发现不是POST请求,而是发起了OPTIONS请求。路由设置:Rout...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。