微信小程序支付(借用第三方类库完成)
作者:项羽 •
再贴出为Thinkphp5整合过后的sdk 传送门(主要是对命名空间的处理)下载后放到extend目录里面即可。
方法调用
<?php
/**
* Created by PhpStorm.
* User: 项羽
* Date: 2019/3/5
* Time: 18:20
*/
namespace app\api\controller\book;
class Pay
{
/*订单支付*/
public function payOrder(){
$openid='owMmW5HwAxg3MRABK9c0Sa-rW_ls';
$action = 'payResult';//回调方法
$preData = [
'money' => 0.01,//查询的订单金额
'ordersn' =>time(),//查询的订单编号
'openid' => $openid//用户openid
];
$body = '书籍';//商品描述
$class = new \app\api\controller\book\Paylibrary();
$item =$class->processPay($action,$preData,$body);
return $item;
}
}
专有类库整合
<?php
/**
* Created by PhpStorm.
* User: 项羽
* Date: 2019/3/6
* Time: 11:33
* 支付专有类库
*/
namespace app\api\controller\book;
use think\Request;
use yansongda\pay\Pay;
class Paylibrary
{
protected $appid = ''; //小程序appid
protected $mch_id = ''; //商户号
protected $key = ''; //商户秘钥
/**
* 支付的配置文件
* @param $action 回调地址的方法
* @return array 支付配置数据
*/
public function processConfig($action){
$request = Request::instance();
$baseurl = $request->domain();
$config = [
'miniapp_id' => $this->appid, // 小程序 APPID
'mch_id' => $this->mch_id,
'key' => $this->key,
'notify_url' => $baseurl.'/api/Payresult/'.$action,//支付回调url
'cert_client' => './apiclient_cert.pem', // optional,退款等情况时用到(文件放在更目录下)
'cert_key' => './apiclient_key.pem',// optional,退款等情况时用到
'log' => [ // optional
'file' => './logs/wechat.log',
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
'type' => 'single', // optional, 可选 daily.
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
],
];
return $config;
}
/**
* 统一下单
* @param $action 回调方法
* @param $money 订单金额
* @param $ordersn 订单号
* @param $openid openid
* @return \yansongda\supports\Collection 支付成功携带验签的数据,客户端使用该数据拉起支付页面
*/
public function processPay($action,$preData,$body = '订单支付'){
$total_fee = $preData['money'] * 100;
$payData = [
'out_trade_no' => $preData['ordersn'],
'total_fee' => $total_fee, // **单位:分**
'body' => $body,
'openid' => $preData['openid'],
];
$config = $this->processConfig($action);
$pay = Pay::wechat($config)->miniapp($payData);
return $pay;
}
/**
* 生成随机数
* @param $length 位数
* @return null|string 返回字符串
*/
public function random($length){
$str = null;
$strBase = "0123456789";//如有需求可增加特殊符号
$max = strlen($strBase) - 1;
for ($i = 0;$i < $length;$i++) {
$str .= $strBase[rand(0, $max)];
}
return $str;
}
}
最后就是测试接口返回参数是否正确,返回的是5个参数