一、生成预支付订单并获取预支付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或相关第三方库来简化开发流程。