首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
统计
关于
WOW怀旧
友链
更多
留言
壁纸
直播
Search
1
关于《杀死那个石家庄人》背后的故事
3,797 阅读
2
沈阳故宫之旅
608 阅读
3
摄影记录|鸿恩寺
562 阅读
4
赤壁赋| 知不可乎骤得,托遗响于悲风
423 阅读
5
Laravel-admin 删除行|删除回调
366 阅读
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
redis
万能青年
累计撰写
60
篇文章
累计收到
142
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
页面
统计
关于
WOW怀旧
友链
留言
壁纸
直播
搜索到
1
篇与
的结果
2021-11-13
EasyWechat 微信小程序接入微信支付|笔记
环境要求{callout color="#f0ad4e"} PHP >= 7.4 PHP cURL 扩展 PHP OpenSSL 扩展 PHP SimpleXML 扩展 PHP fileinfo 拓展{/callout}安装$ composer require overtrue/wechat:~5.0 -vvv使用use EasyWeChat\Factory; // ------------------------ $config = [ // 必要配置 'app_id' => 'xxxx', //小程序ID 'mch_id' => 'your-mch-id', //商家ID 'key' => 'key-for-signature', // API 密钥 // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书) 'cert_path' => 'path/to/your/cert.pem', // XXX: 绝对路径!!!! 'key_path' => 'path/to/your/key', // XXX: 绝对路径!!!! 'notify_url' => '默认的订单回调地址', // 你也可以在下单时单独设置来想覆盖它 ]; // ------------------------ $app = Factory::payment($config); $res = $app->order->unify([ 'body' => $desc, //商品简介 'out_trade_no' => $order_code, //订单号 'total_fee' => floatval($info->pay_fee * 100), //价格 单位为分 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址 'notify_url' => $wx_config['notify_url'], // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型 'openid' => $user_info->openid, //用户的openid ]); // ------------------------ if ($res['return_code'] == 'FAIL') return $this->error_back(-1, '预支付请求失败' . $res['return_msg'], []); // ------------------------ $pay_time = time(); $appId = $res['appid']; $nonceStr = $res['nonce_str']; $prepay_id = $res['prepay_id']; $timeStamp = $pay_time; $key = $wx_config['md5_key']; // ------------------------ $paySign = md5("appId=$appId&nonceStr=$nonceStr&package=prepay_id=$prepay_id&signType=MD5&timeStamp=$timeStamp&key=$key"); // 这个地方就是我所说的二次签名! // ------------------------ // 返回给小程序 $re = []; $re['nonceStr'] = $nonceStr; $re['timeStamp'] = strval($timeStamp); // 小程序支付的timeStamp参数,必须使用这个 timeStamp,因为已经计算到了paySign中 $re['package'] = "prepay_id=" . $prepay_id; $re['paySign'] = $paySign; $re['signType'] = 'MD5'; // ------------------------ //自己的操作逻辑部分--- 然后返回给前端 // ------------------------ return $this->success_back(200, 'success', $re); 回调 /** * * 支付回调地址 */ public function NotifyPayApi(Request $request) { $wx_config = config("app.wx_pay"); $config = [ // 必要配置 'app_id' => $wx_config['app_id'], 'mch_id' => $wx_config['mch_id'], 'key' => $wx_config['md5_key'], // API 密钥 // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书) 'cert_path' => '', // XXX: 绝对路径!!!! 'key_path' => '', // XXX: 绝对路径!!!! 'notify_url' => $wx_config['notify_url'], // 你也可以在下单时单独设置来想覆盖它 ]; $app = Factory::payment($config); $response = $app->handlePaidNotify(function ($message, $fail) { if ($message['result_code'] == 'SUCCESS' && $message['return_code'] == 'SUCCESS') { $order_sn = $message['out_trade_no']; // 订单单号 $openid = $message['openid']; // 付款人openID $total_fee = ($message['total_fee']) / 100; // 付款金额 $transaction_id = $message['transaction_id']; // 微信支付流水号 $order_info = $this->FindOrderByOrderCode($order_sn); if (empty($order_info)) return false; // 更新订单 try { DB::beginTransaction(); //数据库逻辑 //插入流水 DB::commit(); return true; } catch (\Exception $e) { Db::rollBack(); return false; } } else { return false; } }); return $response; }就这么简单踩坑的地方就是拿到了 prepay_id 之后居然还要二次签名最后附上EasyWechat的官方地址 https://www.easywechat.com/5.x/payment/
2021年11月13日
359 阅读
0 评论
0 点赞