首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
关于
友链
留言
壁纸
Search
1
关于《杀死那个石家庄人》背后的故事
70 阅读
2
佳木斯的夜
34 阅读
3
PHP八大设计模式
32 阅读
4
以梦喂马
32 阅读
5
centos7安装Wkhtmltopdf
27 阅读
编程技术
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
设计模式
Ab
Linux
MAC
支付
CentOs
sh
如梦初醒
累计撰写
40
篇文章
累计收到
7
条评论
首页
栏目
编程技术
网络安全
生活杂记
页面
关于
友链
留言
壁纸
搜索到
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日
18 阅读
0 评论
0 点赞