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实现导出带样式的Excel

    接下来我会详细讲解“PHP实现导出带样式的Excel”的完整攻略。 一、背景介绍 在实际的开发工作中,我们常常需要使用到Excel表格,然而PHP并没有内置的类或函数可以直接导出带样式的Excel,因此我们需要借助一些第三方工具来实现。 二、选择合适的第三方工具 市场上有很多第三方工具可以帮助我们实现导出Excel的功能,例如PHPExcel、PhpSpre…

    PHP 2023年5月26日
    00
  • php获取’/’传参的值简单方法

    PHP获取URL参数是非常常见的操作,对于参数的获取,不仅限于通过?符号传参。有时候也需要通过 / 路径传参,例如 /article/123。 下面是通过 PHP 获取 / 传参的方法: 首先,通过 $_SERVER[‘REQUEST_URI’] 获取完整 URL,然后使用 explode() 或 preg_split() 函数按照 / 将 URL 拆分为数…

    PHP 2023年5月26日
    00
  • PHP 图片文件上传实现代码

    下面我来详细讲解一下“PHP 图片文件上传实现代码”的完整攻略。 步骤一:HTML表单制作 HTML表单用于用户上传图片,代码如下: <form action="upload.php" method="post" enctype="multipart/form-data"> <la…

    PHP 2023年5月23日
    00
  • php开启与关闭错误提示适用于没有修改php.ini的权限

    为了控制PHP错误提示,我们可以设置PHP的错误报告级别。PHP有个内置的错误报告函数 error_reporting 可以通过调用来修改错误级别。 假如您无法修改 php.ini 的配置,也可以通过 ini_set() 函数在运行时来设置 PHP 配置,来达到开启或关闭 PHP 错误提示的目的。具体步骤如下: 首先,查看当前 PHP 状态。 <?ph…

    PHP 2023年5月24日
    00
  • PHP生成二维码的两个方法和实例

    下面我将详细讲解“PHP生成二维码的两个方法和实例”的完整攻略。 一、PHP生成二维码的两个方法 1.使用QRcode类 QRcode类是一个PHP库,可以将数据转换为QR码图片,然后通过浏览器输出。它的使用方法如下: include_once(‘qrlib.php’); QRcode::png(‘My Text’); 其中,’My Text’是要生成二维码…

    PHP 2023年5月23日
    00
  • Laravel实现用户多字段认证的解决方法

    请允许我详细讲解“Laravel实现用户多字段认证的解决方法”的完整攻略。 问题背景 在实际的应用场景中,我们经常需要使用多字段完成用户身份认证。比如,我们的用户既可以使用email登录,也可以使用手机号码登录。Laravel默认提供的用户认证仅支持单字段认证,因此我们需要做一些额外的工作,来实现多字段认证。 解决方法 我们可以通过自定义Laravel的认证…

    PHP 2023年5月23日
    00
  • PHP中localeconv()函数的用法

    让我来详细为你讲解一下PHP中localeconv()函数的用法。 1. 首先介绍localeconv()函数的作用 PHP中的localeconv()函数用于获取本地信息,包括货币符号、小数点符号、千分位分隔符、货币格式等,并以关联数组的形式返回这些信息。 2. localeconv()函数的语法 localeconv() 3. localeconv()函…

    PHP 2023年5月26日
    00
  • PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数

    一、时间戳和日期互相转换 // 获取时间戳 $date = time(); // 获取当前时间戳 $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒 // 日期转换为时间戳 $date = “2019-08-08 08:08:08”; $timestamp = strt…

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