云霾在黑暗中发愁,竟忘了遮住太阳的就是它们自己。 ---泰戈尔-

序
由于最近在接触buildadmin框架,在插件市场是有支付插件,文章描述插件的使用和配置过程
教程
1.Buildadmin后台市场安装插件

2.安装插件之后配置支付的商户号和相关证书。
证书的位置上传到项目目录的pubilc/crt/wx目录下。添加绝对路径到配置项中(支付公钥和v3证书)

商户私钥
/www/wwwroot/你的域名/public/cert/wx/apiclient_key.pem
商户公钥证书
/www/wwwroot/你的域名/public/cert/wx/apiclient_cert.pem
回调地址
https://你的域名/api/PayNotify/wechat
支付公钥绝对路径
/www/wwwroot/你的域名/public/cert/wx/pub_key.pem


3.后台接口
Buildadmin项目app/api/ controller目录下建一个AppPay.php文件配置支付函数
教程中openid还有金额就使用前端传入,正式项目中请为安全考虑

<?php
namespace app\api\controller;
use ba\PayLib;
use Yansongda\Pay\Pay;
use think\facade\DB;
use think\facade\Log;
use app\common\controller\Api;
/**
* 支付示例控制器
* 本文件提供了完整的支付流程示例,适合新手学习
*/
class AppPay extends Api
{
/**
* 小程序支付
* @return void
*/
public function miniPay()
{
// 获取用户提交的参数
$openid = $this->request->param('openid');
$amount = $this->request->param('amount'); // 默认1分
// 吧 $amount转成数值类型
$amount = floatval($amount);
// 2. 获取支付配置
$config = PayLib::getConfig();
Pay::config($config);
// 3. 构建支付订单参数
$order = [
'out_trade_no' => time().'',
'description' => '会员商品',
'amount' => [
'total' => $amount,
'currency' => 'CNY',
],
'payer' => [
'openid' => $openid,
]
];
// 4. 发起小程序支付
$result = Pay::wechat()->mini($order);
// 5. 返回支付参数给前端
$this->success('获取支付参数成功',$result);
}
}
4.uni-app发起支付
点击支付按钮后,触发支付函数;手机上直接调用支付,开发工具会想出现二维码
payTap() {
uni.request({
url: '你的域名/index.php/api/AppPay/miniPay',
method: 'POST',
data: {
openid: '用户openid',
amount: '1',
product_name: '测试'
},
success: (res) => {
console.log(res)
const payData = res.data.data;
// 2. 调起微信支付
uni.requestPayment({
rovider: 'wxpay',
timeStamp: String(payData.timeStamp),
nonceStr: payData.nonceStr,
package: payData.package,
signType: payData.signType,
paySign: payData.paySign,
success: (payRes) => {
resolve({
success: true,
orderNo: payData.order_no,
data: payRes
})
},
})
}
})
},

最后
更简单的方式可以使用uni-pay + uni云空间;不用调试太多的代码,更快上手
解决uni-pay公众号H5支付,获取openid跨域请求失败