ios内购支付-支付宝APP支付提现
文章目录
- 前言
- 一、IOS内购支付(ios订单生成自己写逻辑即可)
- 1.支付回调票据校验controller
- 1.支付回调票据校验server
- 二、安卓APP支付宝支付
- 1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)
- 2.生成订单返回支付宝字符串server方法
- 3.支付宝回调处理
- 三、支付宝APP提现(没有授权,直接填用户账户信息)
- 1.支付宝APP提现controller方法
- 2.支付宝APP提现server方法
前言
这里用的是thinkphp5,但是支付这个其他框架或版本也可以参考,只需要改下写法即可
一、IOS内购支付(ios订单生成自己写逻辑即可)
在苹果内购支付中第一步先生成一个内部订单,然后把订单信息给到IOS客户端,内购支付只要是回调校验票据出路,这个票据会返给IOS客户端,让客户端把票据及订单信息一起传过来,注意订单号唯一即可
1.支付回调票据校验controller
public function payResult()
{//苹果内购的验证收据 orders模型换成自己的订单模型,字段换成自己的订单字段即可$receipt_data = $this->request->post('receipt-data');//票据$orderSn = $this->request->post('order_sn');//订单号// 验证支付状态$result = (new IosCheckServer())->payMoneyCheck($receipt_data, $orderSn);if($result['status']){$this->success('支付成功');}else{$this->error($result['message']);}}
1.支付回调票据校验server
/*** @param $receipt_data* @param $orderSn* @return array* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\ModelNotFoundException* @throws \think\exception\DbException* @throws \think\exception\PDOException* ios充值消费燃币支付回调票据校验*/public function payMoneyCheck($receipt_data, $orderSn){//苹果内购的验证收据 orders模型换成自己的订单模型,字段换成自己的订单字段即可$orderinfo = Orders::where(['order_sn' => $orderSn])->find();if($orderinfo){if($orderinfo['pay_status'] == Orders::PAY_STATUS_PAID){return ['status' => false,'message' => '订单已成功支付,请勿重复发起申请'];}}else{return ['status' => false,'message'=>'订单异常'];}// 验证支付状态$result = $this->validate_apple_pay($receipt_data);if($result['status']){/*业务逻辑*/Db::startTrans();try {$orderinfo->pay_status = Orders::PAY_STATUS_PAID;$orderinfo->paid_at = time();$orderinfo->save();/*处理自己内部业务逻辑*//*处理自己内部业务逻辑*//*处理自己内部业务逻辑*/Db::commit();} catch (\Exception $e) {Db::rollback();return ['status' => false,'message' => '支付失败,请联系管理员'];}return ['status' => true,'message' => '支付成功'];}else{return ['status' => false,'message' => $result['message']];}}/*** @param $receipt_data* @param $orderinfo* @return array* @throws \think\exception\PDOException* 校验票据*/public function validate_apple_pay($receipt_data){// 验证参数if (strlen($receipt_data) < 20){return ['status' => false, 'message' => '非法参数'];}// 请求验证$html = $this->acurl($receipt_data);$data = json_decode($html,true);// 如果是沙盒数据 则验证沙盒模式if($data['status'] == '21007'){// 请求验证$html = $this->acurl($receipt_data, 1);$data = json_decode($html,true);$data['sandbox'] = '1';}//找出时间最大的数组$receiptitem = $data['receipt']['in_app'];//这个是排序的方法 下面回帖出来 苹果会把这个会员往期的订单信息全部返回,需要找出来最近的那一组信息$item = $this->arraySort($receiptitem,'purchase_date','desc');//判断一下过期时间 延长会员时间$orderThird = $item['transaction_id']; //本次订阅的订单号$orderThirdFirst = $item['original_transaction_id']; //这个是原始订单号if($orderThird == $orderThirdFirst){ //首次订阅 两个相等return ['status' => true,'message' => '支付成功'];}else{//判断过期时间和当前时间比较 expires_date_ms是毫秒单位if($item['expires_date_ms']/1000 > time()){return ['status' => true,'message' => '支付成功'];}else{//过期处理 票据失效return ['code' => false,'message' => '票据失效,请联系管理员'];}}}/*** @param $receipt_data* @param int $sandbox* @return bool|string* 数据校验*/public function acurl($receipt_data, $sandbox = 0){/*** 21000 App Store不能读取你提供的JSON对象* 21002 receipt-data域的数据有问题* 21003 receipt无法通过验证* 21004 提供的shared secret不匹配你账号中的shared secret* 21005 receipt服务器当前不可用* 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送* 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务* 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务*///小票信息$POSTFIELDS = array("receipt-data" => $receipt_data);$POSTFIELDS = json_encode($POSTFIELDS);$url_buy = "https://buy.itunes.apple.com/verifyReceipt";//正式购买地址$url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";//沙盒购买地址$url = $sandbox ? $url_sandbox : $url_buy;//curl - post$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);$result = curl_exec($ch);curl_close($ch);return $result;}/*** @param $arr* @param $key* @param string $type* @return mixed* 查找最新数据*/public static function arraySort($arr,$key,$type='asc'){$keyArr = []; // 初始化存放数组将要排序的字段值foreach ($arr as $k => $v) {$keyArr[$k] = $v[$key]; // 循环获取到将要排序的字段值}if ($type == 'asc') {asort($keyArr); // 排序方式,将一维数组进行相应排序} else {arsort($keyArr);}foreach ($keyArr as $k => $v) {$newArray[$k] = $arr[$k]; // 循环将配置的值放入响应的下标下}$newArray = array_merge($newArray); // 重置下标return $newArray[0]; // 数据返回}
二、安卓APP支付宝支付
前期准备工作:
- 获取 App ID 和 商户私钥
- 申请并下载支付宝公钥证书和应用证书
- 如果站点有ssl更好,没有的话可以下载一个
cacert.pem
证书放到配置文件对应的地址里面,https://curl.se/docs/caextract.html - 完成之后修改一下
php.ini
的配置curl.cainfo = /etc/pki/tls/certs/cacert.pem
这里的地址时我按照原配置文件直接用的,放其他地方的话只要保证配置文件里面一致即可,支付宝的证书我是直接放项目里面的,引用的时候保证路径没问题即可
1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)
controller方法(订单逻辑部分可以自己处理)
/*** @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\ModelNotFoundException* @throws \think\exception\DbException* 会员订单创建 - android*/public function memberOrderByAndroid(){/*** 生成订单数据*/$result = [];Db::startTrans();try {$model = new Orders($arr);$res = $model->save($arr);if ($res === false){Db::rollback();$this->error('订单创建失败');}$server = new AlipayServer();//订单号,金额,回调地址$res = $server->payMemberOrder($model->order_sn, number_format($model->amount, 2), '****/api/v1/member/notify');if ($res['code']){$result['orderStr'] = $res['data'];}Db::commit();}catch (\Exception $exception){Db::rollback();$this->error('订单创建失败');}$this->success('操作成功', $result);}
2.生成订单返回支付宝字符串server方法
/*** @param $out_trade_no 订单号* @param $total_amount 金额* @param $notify_url 回调地址* @return array* 燃币充值 - 安卓 - 支付宝*/public function payMemberOrder($out_trade_no, $total_amount, $notify_url){require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v2/aop/AopCertClient.php';require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v2/aop/request/AlipayTradeAppPayRequest.php';/** 初始化 **/$aop = new \AopCertClient;/** 支付宝网关 **/$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";/** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/$aop->appId = config('alipay.app_id');/** 密钥格式为pkcs1,如何获取私钥请参考:https://opensupport.alipay.com/support/helpcenter/207/201602469554 **/$aop->rsaPrivateKey = trim(config('alipay.private_key'));/** 应用公钥证书路径,下载后保存位置的绝对路径 **/$appCertPath = __PUBLIC__ . '/cert/appCertPublicKey_2021004170664201.crt';/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/$alipayCertPath = __PUBLIC__ . '/cert/alipayCertPublicKey_RSA2.crt';/** 支付宝根证书路径,下载后保存位置的绝对路径 **/$rootCertPath = __PUBLIC__ . '/cert/alipayRootCert.crt';/** 设置签名类型 **/$aop->signType= "RSA2";/** 设置请求格式,固定值json **/$aop->format = "json";/** 设置编码格式 **/$aop->charset= "utf-8";/** 调用getPublicKey从支付宝公钥证书中提取公钥 **/$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);/** 是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内 **/$aop->isCheckAlipayPublicCert = true;/** 调用getCertSN获取证书序列号 **/$aop->appCertSN = $aop->getCertSN($appCertPath);/** 调用getRootCertSN获取支付宝根证书序列号 **/$aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay **/$request = new \AlipayTradeAppPayRequest();/** 设置业务参数 **/$request->setBizContent("{" ./** 商户订单号,商户自定义,需保证在商户端不重复,如:20200612000001 **/"\"out_trade_no\":\"{$out_trade_no}\"," ./** 销售产品码,固定值:QUICK_MSECURITY_PAY **/"\"product_code\":\"QUICK_MSECURITY_PAY\"," ./** 订单金额,精确到小数点后两位 **/"\"total_amount\":\"{$total_amount}\"," ./** 订单标题(可自定义) **/"\"subject\":\"会员充值\"," ./** 订单描述(可自定义) **/"\"body\":\"会员充值\"" ."}");/** 异步通知地址,以http或者https开头的,商户外网可以post访问的异步地址,用于接收支付宝返回的支付结果,如果未收到该通知可参考该文档进行确认:https://opensupport.alipay.com/support/helpcenter/193/201602475759 **/$request->setNotifyUrl($notify_url);try {/** 调用SDK生成支付链接,可在浏览器打开链接进入支付页面 **/$result = $aop->sdkExecute($request);$result = str_replace('&', '&', htmlspecialchars($result));/** response.getBody()打印结果就是orderString,可以直接给客户端请求,无需再做处理。如果传值客户端失败,可根据返回错误信息到该文档寻找排查方案:https://opensupport.alipay.com/support/helpcenter/89 **/return ['code' => 1, 'data' => $result, 'msg' => ''];} catch (\Exception $e) {return ['code' => 0, 'data' => $e->getMessage(), 'msg' => ''];}}
返回APP客户端示例:
3.支付宝回调处理
/*** @return string* 安卓充值支付回调*/public function notify(){if(isset($_POST['out_trade_no']) && empty($order_sn)){$order_sn = $_POST['out_trade_no'];}Db::startTrans();try {$order = Orders::where('order_sn', $order_sn)->find();if(!$order){Db::rollback();return 'false';}$order->save(['pay_status' => Orders::PAY_STATUS_PAID]);//处理自己的业务逻辑Db::commit();}catch (\Exception $exception){Db::rollback();return 'false';}return 'success';}
三、支付宝APP提现(没有授权,直接填用户账户信息)
这里设计的是让用户输入支付宝账户和绑定的用户名,授权的话可以参考支付宝文档https://opendocs.alipay.com/common/02nk10?pathHash=a7475006
1.支付宝APP提现controller方法
/*** 提现到支付宝*/public function alipayToUser(){$redis = new \Redis();$redis->connect('127.0.0.1', 6379);$redis->auth('Hd20240306');$lockKey = 'box_lock_' . $this->user->id;$lockValue = uniqid(); // 生成唯一值,用于解锁验证$expireTime = 10; // 锁的超时时间,秒// 尝试获取锁$isLocked = $redis->setnx($lockKey, $lockValue);if ($isLocked) {$redis->expire($lockKey, $expireTime); // 设置锁的过期时间,以避免死锁Db::startTrans();try {$out_biz_no = $this->request->post('out_biz_no');//商户端的唯一订单号$payee_type = $this->request->post('payee_type');//收款方账户类型(支付宝账户)$payee_account = $this->request->post('payee_account');//收款方支付宝账号$name = $this->request->post('name');//收款方支付宝账号if (!$name || $name == ''){throw new Exception('请输入支付宝绑定的真实用户名');}$cash = (new Cash())->where('order_sn', $out_biz_no)->find();if (!$cash){throw new Exception('订单有误');}$amount = number_format($cash->amount, 2);//转账金额//用户 -$num = number_format($amount * config('money.other'), 2);$memo = '提现'.$num.'燃币';$user_info = \app\common\model\User::where('id', $this->user->id)->find();if ($user_info->money < number_format($cash->amount * config('money.other'), 2)){throw new Exception('余额不足');}//业务逻辑处理//提现(new AlipayServer())->payToUser($out_biz_no, $payee_account, $amount, $payee_type, $name);//订单状态变更$cash->payee_account = $payee_account;$cash->real_name = $name;$cash->pay_status = 2;$cash->save();Db::commit();}catch (\Exception $exception){Db::rollback();Log::info('alipayToUser-to' . $exception->getMessage());$this->error($exception->getMessage());}$this->success('提现成功');} else {$this->error('操作过于频繁,请稍后再试');}}
2.支付宝APP提现server方法
/*** @param $outBizNo - 订单号* @param $payeeAccount - 账户* @param $amount - 金额* @param $payeeType - 账户类型* @param $name - 账户绑定的实名信息* @param string $remark - 备注*/public function payToUser($outBizNo, $payeeAccount, $amount, $payeeType, $name, $remark = '提现'){require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v3/src/Util/AlipayConfigUtil.php';require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v3/src/Util/AlipayLogger.php';require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v3/src/Api/AlipayFundTransUniApi.php';require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v3/src/Model/AlipayFundTransUniTransferModel.php';require_once __PUBLIC__ . '/../vendor/alipaysdk/openapi/v3/src/Model/Participant.php';// 初始化SDK$alipayConfigUtil = new AlipayConfigUtil($this->getPayConfig());// 构造请求参数以调用接口$apiInstance = new AlipayFundTransUniApi(new Client());// 设置AlipayConfigUtil$apiInstance->setAlipayConfigUtil($alipayConfigUtil);$data = new AlipayFundTransUniTransferModel();// 设置商家侧唯一订单号$data->setOutBizNo($outBizNo);//自己定义的转账外部单号// 设置订单总金额$data->setTransAmount($amount);// 设置描述特定的业务场景$data->setBizScene("DIRECT_TRANSFER");// 设置业务产品码$data->setProductCode("TRANS_ACCOUNT_NO_PWD");// 设置转账业务的标题$data->setOrderTitle($remark);// 设置收款方信息$payeeInfo = new Participant();$payeeInfo->setIdentity($payeeAccount);$payeeInfo->setIdentityType($payeeType);$payeeInfo->setName($name);$data->setPayeeInfo($payeeInfo);// 设置业务备注$data->setRemark($remark);// 设置转账业务请求的扩展参数$data->setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");try {//屏蔽日志打印AlipayLogger::setNeedEnableLogger(false);$result = $apiInstance->transfer($data);$result = json_decode($result, true);if ($result['status'] == 'SUCCESS'){return true;}else{throw new Exception($result['message']);}} catch (ApiException $e) {throw new Exception('操作失败' . $e->getMessage());}}
相关文章:

ios内购支付-支付宝APP支付提现
文章目录 前言一、IOS内购支付(ios订单生成自己写逻辑即可)1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)2.生成订…...

新课发布|鸿蒙HarmonyOS Next商城APP应用开发实战
2024年年初,鸿蒙HarmonyOS Next星河版强势发布,随着鸿蒙系统的普及和应用场景的拓展,市场需求将持续增加。鸿蒙系统已经应用于华为的智能手机、平板电脑、智能家居等多个领域,并有望在未来拓展到智能汽车、物联网等更多领域。这为…...

基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统
摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差…...

【数据分享】2001-2023年我国省市县镇四级的逐月平均气温数据(免费获取/Shp/Excel格式)
之前我们分享过1901-2023年1km分辨率逐月平均气温栅格数据,该数据来源于国家青藏高原科学数据中心。为方便大家使用,我们还基于上述平均气温栅格数据将数据处理为Shp和Excel格式的省市县三级逐月平均气温数据(可查看之前的文章获悉详情&#…...

c#代码介绍23种设计模式_16迭代器模式
目录 1、迭代器模式的介绍 2、迭代器模式的定义 3、迭代器模式的结构 4、代器模式角色组成 5、迭代器实现 6、迭代器模式的适用场景 7、迭代器模式的优缺点 8、.NET中迭代器模式的应用 9、实现思路 1、迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言…...

408算法题leetcode--第23天
236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先\思路:递归,如注释时间和空间:O(n) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) …...

帝国CMS系统开启https后,无法登陆后台的原因和解决方法
今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…...

根据视频id查询播放量
声明:文章仅用于学习交流,如有侵权请联系删除 如何根据视频ID查询视频的播放数量 在数字化时代,视频内容的消费已成为人们日常生活的重要组成部分。无论是社交媒体平台上的短视频,还是视频分享网站上的长视频,了解视频的播放数量…...

初始爬虫11
1.斗鱼selenium爬取 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By import timeclass Douyu(object):def __init__(self):self.url https://www.douyu.com/directory/allself.driver webdriver.Chrome()self.driver…...

SSY20241002提高组T4题解__纯数论
题面 题目描述 有一天 p e o p 1 e peop1e peop1e 学长梦到了一个丑陋的式子: ∑ i 1 n ( ∑ m 1 R F m ) ! i ! ∑ l 0 i ∑ j 0 ∑ t 1 R F t { K i − l } l ! { i ∑ w 1 R F w − j } j ! \sum_{i1}^n (\sum_{m1}^R F_m)!\times i!\times \sum_{l…...

Python:lambda 函数详解 以及使用
一、lambda 语法 lambda 函数的语法只包含一个语句,表现形式如下: lambda [arg1 [,arg2,.....argn]]:expression 其中,lambda 是 Python 预留的关键字,[arg…] 和 expression 由用户自定义。 具体如下: [arg…] 是参数列表&#…...

【C++】空指针和野指针
文章目录 1.空指针2.野指针总结 1.空指针 概念:指针变量指向内存中编号为0的空间。 用途:初始化指针变量。 注意:空指针指向的内存是不可以访问的。 示例: int main(){//指针变量p指向内存地址编号为0的空间int *PNULL&#…...

大模型提示词
纯输入版提示工程词 输出一个九九乘法口诀表 当然可以!以下是九九乘法口诀表: 1 x 1 1 1 x 2 2 2 x 2 4 1 x 3 3 2 x 3 6 3 x 3 9 1 x 4 4 2 x 4 8 3 x 4 12 4 x 4 16 1 x 5 5 2 x 5 10 3 x 5 15 4 x 5 20 5 …...

在线css像素px到Em的转换器
具体请前往:在线Px转Em工具--将绝对像素(px)长度单位转换为相对长度em...

回溯算法解决排列组合及子集问题
216. 组合总和 III39. 组合总和40. 组合总和 II46. 全排列47. 全排列 II77. 组合 78. 子集 90. 子集 II 以上是力扣设计相关问题的题目。排列组合还是子集问题无非就是从序列 nums 中以给定规则取若干元素,主要有以下几类: 元素无重不可复选࿰…...

Unity中Mesh多种网格绘制模式使用方法参考
Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是 Triangles网格由三角形构成。Quads网格由四边形构成。Lines网…...

【Spring Security】基于SpringBoot3.3.4版本②如何配置免鉴权Path
基于Spring Boot 3.3.4,详细说明Spring Security 6.3.3的使用 摘要本地开发环境说明SecurityFilterChain介绍application.ymlWen3SecurityProperties.java修改DemoWen3Security修改SecurityFilterChainIgnoredPathController.javaIgnoredPathController2.java启动工程测试测试…...

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性
PDF文档回复:20241004 1 P7074 [CSP-J2020] 方格取数 [题目描述] 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格&#x…...

Hive数仓操作(十二)
一、Hive 中的行列转换 1. 行转列: collect_list() collect_list() 函数用于将一个列中的数据收集成一个数组。 示例数据文件 假设有一个名为 orders.txt 的文件,内容如下: 1,101 1,101 1,103 2,104 2,105导入数据到 Hive 表 首先&…...

计算机毕业设计 基于SpringBoot和Vue的课程教学平台的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

有状态(Session) VS 无状态(Token)
目录 概念 JWT Token在项目中使用 概念 有状态和无状态服务是两种不同的服务架构,两者的不同之处在于对于服务状态的处理。 1、有状态服务 是指程序在执行过程中生成的中间数据,服务器端一般都要保存请求的相关信息,每个请求可以默认地使…...

天坑!Spark+Hive+Paimon+Dolphinscheduler
背景: 数据中台项目使用Spark+Hive+Paimon做湖仓底层,调度任务使用的是基于Dolphinscheduler进行二开。在做离线脚本任务开发时,在Paimon库下执行非查询类SQL报错。 INSERT报错 DELETE报错 现状: 原始逻辑为数据中台中选择的Paimon数据源,实际上在Dolphinscheduler中是…...

JAVA——IO框架
目录 一、框架 二、导入框架步骤 三、测试 一、框架 框架就是为了解决某类问题,编写的一套类、接口等。大多数框架都是第三方研发的 好处: 在框架的基础上开发,提高开发效率 框架的形式:一般是把类、接口编译成class形式,再…...

项目管理系统如何实现项目申报流程自动化?
传统的项目申报流程往往繁琐复杂,涉及众多环节和部门间的协作,不仅耗时费力,还容易因人为疏忽而导致错误或延误。随着信息技术的飞速发展,项目管理系统的出现为项目申报流程的自动化提供了可能,极大地提升了申报效率和…...

ndb9300public-ndb2excel简介
1 引言 ndb9300是一个自己定义的机载导航数据库劳作(不敢称为项目)代号,其中3表示是第3种数据库。 多年前,对在役民航客机中的某型机载导航数据库的二进制文件进行分析,弄明白它的数据结构后做了几个工具,…...

C++:const成员
const修饰成员变量,要在初始化列表中进行初始化。 const修饰成员函数,要放在函数后,称为常函数。常函数不能修改普通成员变量。 const修饰的对象,称为常对象。常对象不能修改普通成员变量,只能读取。 常对象只能使用…...

基于ROS的激光雷达点云物体检测
环境 RTX 2060(后面关于算力) ubuntu 18.04 ROS melodic (ubuntu 18.04安装ROS melodic可以参看我这篇文章ubuntu 18.04安装ROS系统) CUDA 10.0 cudnn 7.6.5 caffe cmake 3.18.0(不能低于3.12.2) opencv 3…...

大模型训练环境搭建
硬件资源说明 本教程基于GPU 3090的服务器 资源类型 型号 核心指标 CPU Intel(R) Xeon(R) Bronze 3204 CPU 1.90GHz 12核 内存 / 125Gi GPU NVIDIA GeForce RTX 3090 24G显存 注意:接下来的部分命令需要使用科学上网,需要事先配置好。 安…...

使用Java调用GeoTools实现全球国家矢量数据入库实战
目录 前言 一、相关数据介绍 1、无空间参考的数据 2、有空间参考的数据 3、空间信息表物理模型 二、全球国家空间数据入库 1、后台实体类图 2、后台实体对象关键代码 三、时空数据入库实践 1、读取无空间参考数据 2、入库成果及注意事项 四、总结 前言 在当今世界&…...

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...