废话不多,直接上代码:
1.config.php
<?php
/**
* 微信支付商户信息配置文件
* APIv3版本
*/
$wechatpay_config = [
/**
* 绑定支付的APPID
*/
'appid' => '***********',
/**
* 商户号
*/
'mchid' => '**********',
/**
* 商户APIv3密钥
*/
'apikey' => '**********',
/**
* 公众帐号secert(仅JSAPI支付需要配置)
*
* 获取说明:https://kf.qq.com/faq/181105JJNbmm181105eUZfee.html
*/
'appsecret' => '**********',
/**
* 「商户API私钥」文件路径
*/
'merchantPrivateKeyFilePath' => 'protected/cert/apiclient_key.pem',
/**
* 「商户API证书」的「证书序列号」
*/
'merchantCertificateSerial' => '**********',
/**
* 「微信支付平台证书」文件路径
* 这个证书不需要上传,只需设置好路径,会自动下载并保存
*/
'platformCertificateFilePath' => 'protected/cert/cert.pem',
/**
* 商户证书路径(仅退款、撤销订单时需要)
*/
'sslcert_path' => 'protected/cert/apiclient_cert.pem',
/**
* 商户证书私钥路径(仅退款、撤销订单时需要)
*/
'sslkey_path' => 'protected/cert/apiclient_key.pem',
/**
* 子商户号
* 服务商模式子商户需要填写
*/
//'sub_mchid' => '',
/**
* 子商户APPID(可留空)
*/
//'sub_appid' => '',
/**
* 是否电商收付通
* 服务商模式可配置,需同时填写子商户号
*/
//'ecommerce' => false,
];
return $wechatpay_config;
2.jspay.php
<?php
/**
* 微信支付JSAPI支付示例
*/
require __DIR__ . '/../vendor/autoload.php';
@header('Content-Type: text/html; charset=UTF-8');
$hostInfo = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
//引入配置文件
$wechatpay_config = require('config.php');
//①、获取用户openid
try{
$tools = new \WeChatPay\JsApiTool($wechatpay_config['appid'], $wechatpay_config['appsecret']);
$openid = $tools->GetOpenid();
}catch(Exception $e){
echo $e->getMessage();
exit;
}
//②、统一下单
$params = [
'body' => 'sample body', //商品名称
'out_trade_no' => date("YmdHis").rand(111,999), //商户订单号
'total_fee' => '150', //支付金额,单位:分
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //支付用户IP
'notify_url' => $hostInfo.dirname($_SERVER['SCRIPT_NAME']).'/notify.php', //异步回调地址
'openid' => $openid,
];
//发起支付请求
try {
$client = new \WeChatPay\PaymentService($wechatpay_config);
$result = $client->jsapiPay($params);
$jsApiParameters = json_encode($result);
} catch (Exception $e) {
echo '微信支付下单失败!'.$e->getMessage();
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<link href="//cdn.staticfile.org/ionic/1.3.2/css/ionic.min.css" rel="stylesheet" />
<title>微信支付手机版</title>
</head>
<body>
<div class="bar bar-header bar-light" align-title="center">
<h1 class="title">微信安全支付</h1>
</div>
<div class="has-header" style="padding: 5px;position: absolute;width: 100%;">
<div class="text-center" style="color: #a09ee5;">
<i class="icon ion-information-circled" style="font-size: 80px;"></i><br>
<span>正在跳转...</span>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
alert('支付成功')
}
//WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
window.onload = callpay();
</script>
</div>
</div>
</body>
</html>
3.需要的SDK去这里下载:微信支付第三方 PHP SDK