作者:阿dai哥
教程分享
TUTORIAL TO SHARE
天分享了一篇Thinkphp5实现支付宝支付的功能,今天接着利用昨天的代码再分享一篇Thinkphp实现微信支付的功能,实现了如下功能:【公众号支付】、【手机站支付】、【APP支付】、【刷卡支付】、【扫码支付】、【账户转账】、【小程序支付】、【普通红包】、【裂变红包】
分享心得
SHARE THE BODY
以前写微信支付的时候非常蛋疼,今天给大家分享一个微信支付的非官方SDK,在前辈的基础上拓展微信支付功能。https://github.com/yansongda/pay。
!!请先熟悉 微信官方支付说明文档!!
代码分享
SHARE THE BODY
下面就是支付核心的代码
use Yansongda\Pay\Pay;
$config = [
'appid' => 'xx',
'app_id' => 'xx',
'miniapp_id' => 'xx',
'mch_id' => '145776xxxx',
'key' => 'mF2suE9sU6Mk1CxxxxIxxxxx',
'notify_url' => 'http://baidu.net.cn',
'cert_client' => './cert/apiclient_cert.pem',
'cert_key' => './cert/apiclient_key.pem',
'log' => [ // optional
'file' => './logs/wechat.log',
'level' => 'info',
'type' => 'single',
'max_file' => 30,
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
],
// 'mode' => 'dev',
];// 支付
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
];
$result = Pay::wechat($config)->mp($order);
// 退款
$order = [
'out_trade_no' => '1514192025',
'out_refund_no' => time(),
'total_fee' => '1',
'refund_fee' => '1',
'refund_desc' => '测试退款haha',
];
$result = Pay::wechat($config)->refund($order);
// 查询
$result = Pay::wechat($config)->find('out_trade_no_123456');
// 取消
//微信未提供取消订单接口,访问此接口将抛出 `GatewayException` 异常。
// 关闭
$result = Pay::wechat($config)->close('out_trade_no_123456'); //
// 验证服务器数据
$wechat = Pay::wechat($config)
// 是的,验签就这么简单!
$data = $wechat->verify();
$wechat->success()->send();
公众号支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
];
$result = Pay::wechat($config)->mp($order);
手机支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
];
return $wechat->wap($order)->send();
APP支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
];
// 将返回 json 格式,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
return $wechat->app($order)->send();
刷卡支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
'auth_code' => '1354804793001231564897',
];
$result = $wechat->pos($order);
扫码支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
];
// 扫码支付使用 模式二
$result = $wechat->scan($order);
// 二维码内容: $qr = $result->code_url;
账户转账
SHARE THE BODY
order = [
'partner_trade_no' => '', //商户订单号
'openid' => '', //收款人的openid
'check_name' => 'NO_CHECK', //NO_CHECK:不校验真实姓名\FORCE_CHECK:强校验真实姓名
// 're_user_name'=>'张三', //check_name为 FORCE_CHECK 校验实名的时候必须提交
'amount' => '1', //企业付款金额,单位为分
'desc' => '帐户提现', //付款说明
];
$result = $wechat->transfer($order);
小程序支付
SHARE THE BODY
$order = [
'out_trade_no' => time(),
'body' => 'subject-测试',
'total_fee' => '1',
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
];
$result = $wechat->miniapp($order);
普通红包
SHARE THE BODY
$order = [
'mch_billno' => '商户订单号',
'send_name' => '商户名称',
'total_amount' => '1',
're_openid' => '用户openid',
'total_num' => '1',
'wishing' => '祝福语',
'act_name' => '活动名称',
'remark' => '备注',
];
$result = $wechat->redpack($order);
裂变红包
SHARE THE BODY
$order = [
'mch_billno' => '商户订单号',
'send_name' => '商户名称',
'total_amount' => '1',
're_openid' => '用户openid',
'total_num' => '3',
'wishing' => '祝福语',
'act_name' => '活动名称',
'remark' => '备注',
];
$result = $wechat->groupRedpack($order);