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日

相关文章

  • 男士减肥计划,男士轻松减肥方法使用教程(图)

    男士减肥计划:使用教程 简介 男士减肥计划是为男性用户制定的有效减肥方案。该计划包括了多种减肥方法和小技巧,可以轻松改善身体状况和外观。该教程分为三个部分:饮食、运动和生活方式。 饮食 1. 减少热量 要减肥,就必须减少热量。饮食方面,建议戒掉油炸类、甜食、饮料等高热量的食物。不要一次吃太多,多吃少吃是减肥的基本原则。注意膳食均衡,适当增加摄入蛋白质和膳食纤…

    PHP 2023年5月27日
    00
  • 原生javascript的ajax请求及后台PHP响应操作示例

    接下来我会详细讲解“原生javascript的ajax请求及后台PHP响应操作示例”的完整攻略。 1. 什么是AJAX? AJAX(Asynchronous JavaScript And XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。使用AJAX,可以利用JavaScript从服务器异步地拉取数据,然后在不刷新整个页面的情况下更改特定…

    PHP 2023年5月26日
    00
  • 究竟什么是Node.js?Node.js有什么好处?

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,具备事件驱动、非阻塞I/O等特性,可以用于构建高效的网络应用程序和服务端应用。 Node.js有以下好处: 异步I/O:Node.js采用了异步I/O的方式,能够处理大量的并发连接,而不必像传统的服务器一样,为每个连接开一个线程,这大大降低了服务器的内存开销。 高效性能:由于Nod…

    PHP 2023年5月26日
    00
  • mobiledit forensic express pro 7.0 64位完美激活安装教程(附注册机下载)

    我将按照以下格式,为你解释 mobiledit forensic express pro 7.0 64位完美激活安装教程(附注册机下载) 的完整攻略。 1. 下载并安装 mobiledit forensic express pro 7.0 首先,我们需要从官方网站下载 mobiledit forensic express pro 7.0 的安装文件。下载完成…

    PHP 2023年5月27日
    00
  • php和数据库结合的一个简单的web实例 代码分析 (php初学者)

    下面我将给您讲解详细的“PHP和数据库结合的一个简单的Web实例代码分析”的攻略。 1. 准备工作 在开始制作Web实例之前,我们需要准备以下内容: 一台安装有Web服务器和PHP环境的计算机。 一个关系型数据库,如MySQL。 一个数据库管理软件,如phpMyAdmin。 2. 建立数据库和表 在phpMyAdmin中创建一个名为“webdb”的数据库,接…

    PHP 2023年5月24日
    00
  • 基于PHP实现简单的随机抽奖小程序

    下面我来详细讲解“基于PHP实现简单的随机抽奖小程序”的完整攻略。 需求分析 首先,我们需要明确这个抽奖小程序的需求: 随机从一组参与者中抽取指定数量的人员作为获奖者; 将获奖者的信息展示给用户。 实现步骤 了解了需求之后,我们便可以开始具体实现了。 1. 准备数据 首先,我们需要准备一组参与者的信息,可以将这些信息存储在一个数组中,例如: $partici…

    PHP 2023年5月23日
    00
  • PHP使用CURL实现多线程抓取网页

    下面是详细讲解如何使用PHP中的CURL扩展实现多线程抓取网页的完整攻略。 前置知识 在阅读本文之前,需要掌握以下知识: PHP基础语法 CURL的基本使用方法 多线程编程的基本概念 如果你还没有学习过以上知识,建议先自学相关内容。 CURL介绍 CURL是一个用于在命令行和代码中实现数据传输的工具和库,支持HTTP、FTP、SMTP等常见的协议。PHP中也…

    PHP 2023年5月27日
    00
  • PHP mkdir()无写权限的问题解决方法

    要解决PHP mkdir()无写权限的问题,我们可以通过以下步骤进行解决: 1. 确认目录权限 首先要确定你想要创建目录的上层目录有写权限。比如,如果你想要在/webroot/下创建一个新目录,那么/webroot/目录必须具有写入权限。 可以通过ls -la命令查看当前目录的权限,如下所示: $ ls -la /webroot/ drwxr-xr-x. 3…

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