使用wechatpay-php实现JSAPI支付(服务商和普通商户)
以下是一个使用wechatpay-php
库实现微信JSAPI支付的示例代码。请确保您已正确安装wechatpay-php
库,并且有一个有效的商户API证书。
<?php
require_once 'vendor/autoload.php';
use WeChatPay\Util\MemoryCache;
use WeChatPay\Util\PrivateKey;
use WeChatPay\Util\Signer;
use WeChatPay\Util\Utils;
use WeChatPay\Util\Validator;
use WeChatPay\Crypto\AesUtil;
use WeChatPay\Crypto\RsaCryptor;
use WeChatPay\Crypto\Verifier;
use WeChatPay\Exception\InvalidResponseException;
// 配置商户API证书和密钥
$merchantId = '1230000109'; // 商户ID
$merchantSerialNumber = '1230000109'; // 商户API证书序列号
$merchantPrivateKey = '...'; // 商户API私钥
$wechatpayCertificate = '...'; // 微信支付平台证书
// 初始化签名器
$signer = new Signer($merchantSerialNumber, $merchantPrivateKey);
// 创建请求
$body = [
'appid' => 'wx1234567890', // 微信公众号或小程序的ID
'mchid' => $merchantId, // 商户ID
'description' => 'A description', // 商品描述
'out_trade_no' => '20150806125346', // 商户订单号
'notify_url' => 'https://example.com/notify', // 通知地址
'amount' => [
'total' => 100, // 订单总金额,单位为分
'currency' => 'CNY' // 货币类型
],
'payer' => [
'openid' => 'o1234567890' // 用户在微信的OpenID
]
];
// 创建请求并签名
$request = new \WeChatPay\JSAPIPay\JSAPIPay($signer, $body);
$response = $request->send();
// 输出预支付ID
if ($response->isSuccess()) {
$prepayId = $response->get('prepay_id');
echo json_encode([
'prepayId' => $prepayId,
'appId' => $body['appid'],
'timeStamp' => (string) time(),
'nonceStr' => Utils::createNoncestr(),
'package' => 'prepay_id=' . $prepayId,
'signType' => 'RSA',
'paySign' => $signer->sign([
'appId' => $body['appid'],
'timeStamp' => (string) time(),
'nonceStr' => Utils::createNoncestr(),
'package' => 'prepay_id=' . $prepayId,
'signType' => 'RSA',
]),
]);
} else {
// 处理错误
echo $response->getErrorMessage();
}
?>
这段代码展示了如何创建一个JSAPI支付请求,并获取所需的参数以调用微信支付的JS API。它首先配置了商户的API证书和私钥,然后创建了一个签名器。之后,它构建了一个JSAPI支付请求,发送请求以获取预支付ID,并最终生成所需的参数,以便在前端页面调用微信JSAPI。
评论已关闭