实现微信网页支付的php代码示例

胜哥 PHP代码

以下是一个简单的 PHP 微信网页支付代码示例,可以帮助你实现微信网页支付功能。在使用之前,需要先在微信商户平台注册并获取到商户号、AppID、AppSecret、支付密钥等信息。

<?php
// 微信支付信息
$merchantId = 'your-merchant-id'; // 商户号
$appId = 'your-app-id'; // 公众号 AppId
$appSecret = 'your-app-secret'; // 公众号 AppSecret
$payKey = 'your-pay-key'; // 支付密钥
// 获取用户 openid
$code = $_GET['code'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appId}&secret={$appSecret}&code={$code}&grant_type=authorization_code";
$res = file_get_contents($url);
$res = json_decode($res, true);
if (empty($res['openid'])) {
  echo "获取用户 openid 失败";
  exit;
}
$openid = $res['openid'];
// 生成订单号和支付金额
$orderNo = date('YmdHis') . mt_rand(1000, 9999);
$totalFee = 1; // 支付金额(单位为分)
// 构造支付参数
$params = array(
  'appid' => $appId,
  'mch_id' => $merchantId,
  'nonce_str' => md5(mt_rand()),
  'body' => '商品名称',
  'out_trade_no' => $orderNo,
  'total_fee' => $totalFee,
  'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
  'notify_url' => 'http://your-domain.com/wechat_pay_notify.php', // 支付结果回调地址
  'trade_type' => 'JSAPI',
  'openid' => $openid,
);
// 生成签名
ksort($params);
$signStr = urldecode(http_build_query($params)) . '&key=' . $payKey;
$sign = strtoupper(md5($signStr));
$params['sign'] = $sign;
// 将参数转换为 XML 格式
$xml = '<xml>';
foreach ($params as $key => $value) {
  $xml .= "<{$key}>{$value}</{$key}>";
}
$xml .= '</xml>';
// 发起支付请求
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$res = file_get_contents($url, false, stream_context_create(array(
  'http' => array(
    'method' => 'POST',
    'header' => 'Content-type: text/xml',
    'content' => $xml,
    'timeout' => 15,
  ),
)));
$res = simplexml_load_string($res);
if ($res->return_code != 'SUCCESS' || $res->result_code != 'SUCCESS') {
  echo "支付请求失败";
  exit;
}
// 构造支付参数
$payParams = array(
  'appId' => $appId,
  'timeStamp' => time(),
  'nonceStr' => md5(mt_rand()),
  'package' => 'prepay_id=' . $res->prepay_id,
  'signType' => 'MD5',
);
// 生成签名
ksort($payParams);
$signStr = urldecode(http_build_query($payParams)) . '&key=' . $payKey;
$paySign = strtoupper(md5($signStr));
$payParams['paySign'] = $paySign;
// 将支付参数转换为 JSON 格式
$json = json_encode($payParams);
// 输出支付参数,用于前端调用微信支付接口
echo $json;

这段代码实现了以下功能:

  1. 获取用户的 openid。
  2. 生成订单号和支付金额。
  3. 构造支付参数并生成签名。
  4. 发起支付请求并获取预支付 ID。
  5. 构造支付参数并生成签名。
  6. 输出支付参数,用于前端调用微信支付接口。 需要注意的是,该代码只是一个简单的示例,实际使用中还需要做更多的安全性和错误处理。同时,为了确保支付结果的安全性,需要实现支付结果的回调处理,可以参考官方文档:微信支付开发文档