以下是一个简单的 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;
这段代码实现了以下功能:
- 获取用户的 openid。
- 生成订单号和支付金额。
- 构造支付参数并生成签名。
- 发起支付请求并获取预支付 ID。
- 构造支付参数并生成签名。
- 输出支付参数,用于前端调用微信支付接口。 需要注意的是,该代码只是一个简单的示例,实际使用中还需要做更多的安全性和错误处理。同时,为了确保支付结果的安全性,需要实现支付结果的回调处理,可以参考官方文档:微信支付开发文档。
评论