一、生成预支付订单并获取预支付ID(prepay_id):
<?php // 引入微信支付SDK require_once "wechat_pay_sdk.php"; // 设置参数 $appid = '你的AppID'; // 微信公众号或小程序的AppID $mch_id = '你的商户号'; // 微信支付分配的商户号 $nonce_str = md5(uniqid()); // 随机字符串,可以使用自己的随机字符串生成方法 // 构建统一下单请求参数 $params = array( 'appid' => $appid, 'mch_id' => $mch_id, 'nonce_str' => $nonce_str, 'body' => '商品描述', // 商品描述 'out_trade_no' => '商户订单号', // 商户订单号 'total_fee' => '订单金额', // 订单金额(单位:分) 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 客户端IP地址 'notify_url' => '支付回调通知URL', // 支付结果回调通知URL 'trade_type' => 'JSAPI', // 交易类型,JSAPI为公众号支付或小程序支付 'openid' => '用户openid', // 用户在公众号或小程序的openid ); // 使用微信支付SDK生成签名并发送统一下单请求 $wechatPay = new WeChatPay(); $response = $wechatPay->unifiedOrder($params); // 解析返回结果 $result = simplexml_load_string($response); $prepay_id = $result->prepay_id; // 获取预支付ID(prepay_id)
二、生成JSAPI调起支付的参数:
<?php // 引入微信支付SDK require_once "wechat_pay_sdk.php"; // 设置参数 $appid = '你的AppID'; // 微信公众号或小程序的AppID $mch_id = '你的商户号'; // 微信支付分配的商户号 // 生成JSAPI支付参数 $jsapi_params = array( 'appId' => $appid, 'timeStamp' => (string) time(), 'nonceStr' => md5(uniqid()), 'package' => 'prepay_id='.$prepay_id, // 使用获取到的预支付ID(prepay_id) 'signType' => 'MD5', // 签名类型,根据微信支付API文档选择 ); // 使用微信支付SDK生成签名 $wechatPay = new WeChatPay(); $jsapi_params['paySign'] = $wechatPay->generateSign($jsapi_params); $jsapi_params['package'] = urlencode($jsapi_params['package']); // 调起支付时需要对package进行urlencode
三、前端调用JSAPI发起支付: 在前端页面中引入微信JSAPI的相关库文件,并使用生成的JSAPI支付参数调起支付接口。
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script> wx.config({ appId: '<?php echo $jsapi_params["appId"]; ?>', timestamp: '<?php echo $jsapi_params["timeStamp"]; ?>', nonceStr: '<?php echo $jsapi_params["nonceStr"]; ?>', signature: '<?php echo $jsapi_params["paySign"]; ?>', jsApiList: ['chooseWXPay'] }); wx.ready(function() { wx.chooseWXPay({ timestamp: '<?php echo $jsapi_params["timeStamp"]; ?>', nonceStr: '<?php echo $jsapi_params["nonceStr"]; ?>', package: '<?php echo $jsapi_params["package"]; ?>', signType: '<?php echo $jsapi_params["signType"]; ?>', paySign: '<?php echo $jsapi_params["paySign"]; ?>', success: function(res) { // 支付成功后的回调处理 }, fail: function(res) { // 支付失败后的回调处理 } }); }); </script>
以上代码示例演示了使用PHP实现微信支付功能的基本流程,具体的配置和参数需根据实际情况进行调整。在实际项目中,建议使用官方提供的微信支付SDK或相关第三方库来简化开发流程。