php实现微信原生支付(扫码支付)功能

让我来为您讲解如何实现PHP实现微信原生支付(扫码支付)。

1. 注册微信开发者账号

首先需要去微信公众平台注册开发者账号,并完成账号认证等操作,获取到相应的AppID、AppSecret等信息。

2. 配置商户信息

在微信商户平台中开通账户,并进行相关的商户信息配置。在商户平台中会获取到一些必要的信息,如商户号(mch_id)、密钥(key)等。

3. 下载微信支付API

微信支付开发者文档下载官方提供的PHP支付API。

4. 实现支付功能

4.1 统一下单接口

首先在自己的网站中,实现调用微信支付的统一下单接口的功能。

具体实现过程参见示例代码:

<?php

require_once "WxPayApi.php";

// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody("商品描述"); // 商品描述
$input->SetOut_trade_no("商户订单号"); // 商户订单号
$input->SetTotal_fee("订单金额"); // 订单金额
$input->SetNotify_url("异步通知地址"); // 异步通知地址
$input->SetTrade_type("NATIVE"); // 交易类型为原生扫码支付
$input->SetProduct_id("商品ID"); // 商品ID
$result = WxPayApi::unifiedOrder($input);

// 获取二维码内容
if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
    $code_url = $result['code_url'];
    // 输出二维码
    echo '<img src="https://api.qrserver.com/v1/create-qr-code/?data=' . urlencode($code_url) . '"/>';
} else {
    echo '统一下单失败';
}

4.2 支付结果通知接口

还需要实现微信支付结果异步通知接口,处理微信支付系统发来的支付成功通知,并进行相应的业务逻辑处理,如更新订单状态等。

具体实现过程参见示例代码:

<?php

require_once "WxPayNotify.php";
require_once "WxPayApi.php";

class PayNotifyCallBack extends WxPayNotify {
    // 重写回调处理函数,详见微信支付API文档
    public function NotifyProcess($data, &$msg) {
        if ($data['result_code'] == 'SUCCESS') {
            // 支付成功,更新订单状态等业务逻辑处理
            //...
        }
        return true;
    }
}

// 接收并处理来自微信支付系统的支付成功通知
$notify = new PayNotifyCallBack();
$notify->Handle();

到此,就实现了基于PHP的微信原生支付(扫码支付)功能。

5. 附:示例代码

示例代码可以在官方微信支付API的PHP版下载包中找到,这里不再赘述。

再提供一下后台生成二维码的完整示例代码:

<?php

require_once('lib/WxPay.Api.php');
require_once('WxPay.NativePay.php');
require_once('WxPay.Notify.php');

function getParentUrl(){
    $url = ($_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . "/";
    $scriptName = $_SERVER['SCRIPT_NAME'];
    $requestUri = $_SERVER['REQUEST_URI'];
    $requestUri = substr($requestUri, strlen($scriptName));
    $matchedUriParts = array();
    preg_match_all('/(?<=\/)[^\/]*/', $requestUri, $matchedUriParts);
    foreach ($matchedUriParts[0] as $part) {
        if (!empty($part) && strpos($part, ':') === false) {
            $url .= $part . '/';
        }
    }
    return substr($url, 0, strlen($url) - 1);
}

$productname = $_POST["productname"];
$price = $_POST["price"];

$input = new WxPayUnifiedOrder();
$input->SetBody($productname);
$input->SetDetail("details");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee($price * 100);//金额需要乘以100
$input->SetNotify_url(getParentUrl()."notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");

$notify = new NativePay();

$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];

//exit("<script>alert('请用微信扫描二维码进行支付');history.back(-1);</script>");

?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title><?= $productname ?>-支付</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style type="text/css">
        /*.paybox {width: 400px;}
        .paybox img {max-width: 100%;}*/
        body {margin: 0;padding: 0;background: #efefef;color: #333;}
    </style>
</head>
<body>
    <div style="text-align: center;height: 100vh;">
        <img src="http://qr.liantu.com/api.php?text=<?= urlencode($url2) ?>" style="width: 50%;" />
        <br/>
        <p style="color: #999;">请使用微信扫一扫进行支付</p>
    </div>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现微信原生支付(扫码支付)功能 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP实现事件机制的方法

    要实现事件机制,首先需要理解什么是事件。事件是指在系统内发生的某种状态的变化,例如按钮被点击、请求被接收、数据被更新等。而事件机制就是一种基于观察者模式的设计模式,用于处理这些状态变化。 在 PHP 中,可以使用以下两种方法来实现事件机制: 方法一:使用 PHP 内置的 SplSubject 和 SplObserver 接口 通过在对象中使用 SplSubj…

    PHP 2023年5月27日
    00
  • php生成静态文件的多种方法分享

    PHP生成静态文件的多种方法分享 在网站开发中,动态网页的加载速度可能会受到网络、服务器等因素的影响而变得较慢,尤其在高并发情况下,这可能会导致用户的不满,甚至影响网站的使用体验。因此,生成静态文件并使用静态文件来增强网站的访问速度、减轻服务器压力是非常有必要的。现在,我们就来分享一下用PHP生成静态文件的几种方法。 方法一:使用file_put_conte…

    PHP 2023年5月26日
    00
  • php使用websocket示例详解

    关于“php使用websocket示例详解”的攻略,可以分为以下几步: 1. 首先了解WebSocket WebSocket就是一个可以在单个TCP连接上全双工通信的协议。它实现了浏览器和服务器之间的实时双向通信,可以更新网页内容和处理用户交互,可以广泛地应用于网络游戏、聊天室、通知系统等场景。 2. 选择PHP WebSocket框架 在PHP中使用Web…

    PHP 2023年5月23日
    00
  • php中异常处理方法小结

    当PHP程序出现错误时,我们需要对其进行异常处理,以保证程序的正常执行。本文将对PHP中的异常处理方法进行小结。 异常处理的基本概念 异常处理是指当程序出现错误时,让我们能够对其进行捕获和处理,以确保程序的正常执行。在PHP中,异常是通过throw语句来抛出的。当throw语句被执行后,PHP引擎就会停止执行当前函数或脚本,并将控制权传递给异常处理器。 异常…

    PHP 2023年5月26日
    00
  • PHP 闭包详解及实例代码

    PHP 闭包详解及实例代码 什么是闭包函数 闭包函数(Closure),俗称“匿名函数”,是一种可以被存储在变量中的函数,可以作为参数传递给其他函数,也可以从函数中返回。 闭包函数是满足以下条件的函数: 函数的定义没有名称 函数定义时使用了 use 关键字绑定了外部变量 函数可以被赋值给变量 闭包函数的语法 闭包函数的语法如下: $functionName …

    PHP 2023年5月23日
    00
  • php中Socket创建与监听实现方法

    以下是关于“php中Socket创建与监听实现方法”的完整攻略: Socket简介 Socket又称作“套接字”,是在应用层和传输层之间的一个抽象层,它负责处理所有网络通信的细节。在Socket的帮助下,我们可以方便地在不同的计算机之间传送数据,实现网络通信。 Socket创建与监听的实现方法 在PHP中,我们可以使用Socket扩展来创建和监听Socket…

    PHP 2023年5月27日
    00
  • 编写Smarty插件在模板中直接加载数据的详细介绍

    编写Smarty插件可以方便在模板中直接加载数据,下面是具体的攻略: 步骤一:创建插件 在Smarty的plugins目录中创建一个新文件,以“插件名.plugin.php”的格式命名。比如,我们要创建一个名为“myplugin”的插件,就可以在plugins目录中创建一个myplugin.plugin.php的文件。 步骤二:编写插件代码 在myplugi…

    PHP 2023年5月26日
    00
  • W3C是什么意思 W3C标准简介

    W3C是什么意思? W3C是World Wide Web Consortium的首字母缩写,中文名为“万维网联盟”。W3C是一个国际性的标准组织,负责制定Web标准,是Web技术的指导和推荐者。W3C由Web发明人Tim Berners-Lee于1994年创建,总部位于法国南部尼斯市,拥有来自全球各地的会员组织,包括公司、政府部门和领先的Web发展机构等。 …

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部