整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          APP的支付寶支付流程

          APP的支付寶支付流程

          近在做應用商城涉及到小程序微信支付和app支付寶支付,所以也大概地將這方面的東西看了一個遍,整個流程梳理總結一下。

          環境是:tp5 + 小程序 + App

          app_id 商戶appid

          private_path 商戶私鑰

          1.生成密鑰并上傳

          https://opendocs.alipay.com/open/291/105971



          2.PHP的demo下載地址

          https://opendocs.alipay.com/open/54/103419


          3.php支付消息

          
          <?php
          /*
          *	out_trade_no string 支付單號	
          *	total_fee  string 支付金額(單位分)
          * notify_url 支付后回調地址
          *	Date:2021-03-12
          */
          //微信支付
          function parampay($out_trade_no,$total_fee,$notify_url){     
              
              $body='商品支付';//支付標題
              header("Content-type:text/html;charset=utf-8");            
              require_once './alipay/aop/AopClient.php';
              $private_path="./alipay/key/app_private_key.pem";//私鑰路徑
              //構造業務請求參數的集合(訂單信息)
              $content=array();
              $content['timeout_express']="30m";
              $content['product_code']="QUICK_MSECURITY_PAY";//銷售產品碼,固定值
              $content['total_amount']=$total_fee;
              $content['subject']=$body;
              $content['out_trade_no']=$out_trade_no;
              $con=json_encode($content);//$content是biz_content的值,將之轉化成json字符串            
              //公共參數
              $Client=new \AopClient();//實例化支付寶sdk里面的AopClient類,下單時需要的操作,都在這個類里面
              $param['app_id']='';//商戶信息
              $param['method']='alipay.trade.app.pay';//接口名稱,固定值
              $param['format']='json';//請求使用的編碼格式
              $param['charset']='utf-8';//請求使用的編碼格式
              $param['sign_type']='RSA2';//商戶生成簽名字符串所使用的簽名算法類型
              $param['timestamp']=date("Y-m-d H:i:s");//發送請求的時間
              $param['version']='1.0';//調用的接口版本,固定為:1.0
              $param['notify_url']=SITE_URL.'/api/Onilnestudy/alipaynotify';
              $param['biz_content']=$con;//業務請求參數的集合,長度不限,json格式,即前面一步得到的
              // dump($param);
              $paramStr=$Client->getSignContent($param);//組裝請求簽名參數
              // $paramStr='a=123';
              $sign=$Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成簽名
              // dump($sign);
              $param['sign']=$sign;
              return $info=$Client->getSignContentUrlencode($param);//最終請求參數  
          }
          ?>

          異步回調消息處理

          indows 11 KB5011563 終于開始向公司測試渠道以外的用戶推出。此版本帶有一些新功能和一些小的改進。您可以通過 Windows 更新嘗試新的可選補丁或下載 KB5011563 的離線安裝程序。

          Windows 11 KB5011563 是一個可選更新,除非您明確單擊“獲取更新”按鈕,否則它不會自動安裝。正如我們所知,可以跳過可選更新并且我們不必安裝它,除非我們真的需要那些小的改進和錯誤修復。2022 年 4 月的星期二補丁將推出相同的一組更改。

          與上個月的更新不同,2022 年 3 月的可選更新并沒有帶來大量新功能,但幾乎沒有質量改進。例如,Windows 11 通知中心現在可以同時顯示多達三個高優先級 Toast 通知。

          適用于 Windows 11 KB5011563 的下載鏈接

          如前所述,您可以直接從 Windows 更新設置頁面下載和安裝可選更新。同時,可以從 Microsoft 更新目錄下載離線安裝程序(.msu 包)并執行更新,而無需依賴內置機制。

          如果您無法使用 Windows 更新安裝更新,更新目錄特別有用。在這種情況下,您可以從微軟的網站上獲取離線包。要開始,請打開上面的鏈接,選擇“下載”按鈕,復制 .msu 鏈接并在新選項卡中打開它以開始下載。

          Windows 11 KB5011563(內部版本 22000.593)改進

          1. 同時顯示最多三個高優先級 Toast 通知。
          2. 修復了重命名 OneDrive 文件并按 Enter 鍵可能會失去焦點的問題。
          3. Microsoft 已修復 SystemSettings.exe 和 Searchindexer.exe 的問題。

          正如開頭所說,微軟正在對通知中心的默認行為進行更改。更新后,Windows 11 將同時顯示三個高優先級 Toast 通知。這適用于性質相同(優先級)的呼叫、提醒或警報等通知。

          因此,您可能會注意到最多四個 toast 通知,您會發現三個高優先級通知和一個普通優先級通知。

          除了這個新功能,微軟還修復了操作系統中的幾個錯誤。例如,修復了一個錯誤,即 Windows 會錯誤地禁用對使用通用 Windows 平臺 (UWP) 構建的應用程序的啟動應用程序支持。

          另一個嚴重錯誤已修復,其中 SystemSettings.exe 可能會停止工作,并且 searchindexer.exe 會阻止 Outlook 的脫機搜索返回最近的電子郵件。

          微軟表示,它還修復了一個潛在的性能問題,即啟動時間會因網絡 API 中的 UI 線程而增加,當 5G WWAN 設備喚醒緩慢時,網絡會停止響應。

          Build 22000.593 改進和修復:

          • 修復了 wmipicmp.dll 中的內存泄漏。
          • 解決了執行策略設置問題。
          • 解決了 Edge 等 Web 瀏覽器無法正確呈現由 gpresult/h 生成的 HTML 的問題。
          • 解決了 AppLocker 的 PowerShell 測試無法使用“拒絕訪問”錯誤的問題。
          • 解決了 Kerberos.dll 可能在本地安全機構子系統服務 (LSASS) 中停止工作的問題。
          • 在 Azure Active Directory(AAD) Web 帳戶管理器 (WAM) 中添加了對 Microsoft 帳戶 (MSA) 直通的支持。
          • Microsoft 已修復用戶帳戶控制 (UAC) 對話框無法正確顯示請求提升權限的應用程序的問題。
          • Microsoft 已修復 Microsoft OneDrive 文件在重命名并按 Enter 鍵時可能失去焦點的問題。

          桌面水印

          在 Windows 11 Build 22000.593 中,微軟正式在未能滿足操作系統官方系統要求的桌面上啟用桌面水印。

          您可能還記得,Windows 11 官方僅通過 TPM 2.0 和 SecureBoot 支持較新的處理器。為了提醒用戶他們的硬件不受支持,微軟現在在系統托盤上方放置一個水印(桌面右下角,在激活錯誤下方)。

          此水印之前在預覽版本中被發現,現在已通過今天的可選更新進入生產渠道。

          任何在不受官方支持的機器上安裝了 Windows 11 操作系統的人都會在桌面上看到水印,上面寫著“未滿足系統要求”,然后有一個鏈接可以了解更多信息。

          .1 分析

          秒殺活動中,熱賣商品的詳情頁訪問頻率非常高,詳情頁的數據加載,我們可以采用直接從數據庫查詢加載,但這種方式會給數據庫帶來極大的壓力,甚至崩潰,這種方式我們并不推薦。

          ? 商品詳情頁主要有商品介紹、商品標題、商品圖片、商品價格、商品數量等,大部分數據幾乎不變,可能只有數量會變,因此我們可以考慮把商品詳情頁做成靜態頁,每次訪問只需要加載庫存數量,這樣就可以大大降低數據庫的壓力。

          ? 我們這里將采用freemarker來實現商品詳情頁的靜態化,關于freemarker的語法我們就不在這里講解了,大家可以自行去網上查閱相關API。

          4.2 工程搭建

          我們創建一個靜態頁生成工程,用于生成商品詳情頁。

          pom.xml

          <dependencies>
              <!--依賴web-->
              <dependency>
                  <groupId>com.seckill</groupId>
                  <artifactId>seckill-web</artifactId>
                  <version>0.0.1-SNAPSHOT</version>
              </dependency>
          
              <!--api-->
              <dependency>
                  <groupId>com.seckill</groupId>
                  <artifactId>seckill-goods-api</artifactId>
                  <version>0.0.1-SNAPSHOT</version>
              </dependency>
          
              <!--freemarker-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-freemarker</artifactId>
              </dependency>
          </dependencies>
          

          bootstrap.yml

          server:
            port: 18087
          spring:
            application:
              name: seckill-page
            cloud:
              nacos:
                config:
                  file-extension: yaml
                  server-addr: nacos-server:8848
                discovery:
                  #Nacos的注冊地址
                  server-addr: nacos-server:8848
            profiles:
              active: dev #dev 開發環境 #test測試環境 #pro生產環境
            main:
              allow-bean-definition-overriding: true
            #freemarker配置
            freemarker:
              cache: false  #關閉模板緩存,方便測試
              settings:
                template_update_delay: 0  #檢查模板更新延遲時間,設置為0表示立即檢查,如果時間大于0會有緩存不方便進行模板測試
              template-loader-path: classpath:/templates
              charset: UTF-8
              check-template-location: true
              suffix: .ftl
              content-type: text/html
              expose-request-attributes: true
              expose-session-attributes: true
              request-context-attribute: request
          #超時配置
          ribbon:
            ReadTimeout: 300000
            ConnectTimeout: 30000
          
          #靜態頁位置
          htmlPath: D:/page/html
          

          創建文件生成對象:

          public class BaseProcess {
          
              @Autowired
              private Configuration configuration;
          
              /***
               * 生成靜態頁
               * @param dataMap
               *          dataMap.templateName: 模板名字
               *          dataMap.path: 生成文件存儲路徑
               *          dataMap.name: 生成的文件名字
               * @throws Exception
               */
              public void writerPage(Map<String,Object> dataMap) throws Exception {
                  //獲取模板名字
                  String templateName=dataMap.get("templateName").toString();
          
                  //文件生存的路徑
                  String path=dataMap.get("path").toString();
          
                  //文件路徑如果不存在,則創建
                  File file=new File(path);
                  if(!file.exists()){
                      file.mkdirs();
                  }
          
                  //獲取文件名字
                  String fileName=dataMap.get("name").toString();
          
                  //獲取模板對象
                  Template template=configuration.getTemplate(templateName);
          
                  //模板處理,獲取生成的文件字符串
                  String content=FreeMarkerTemplateUtils.processTemplateIntoString(template, dataMap);
          
                  //生成文件
                  FileUtils.writeStringToFile(new File(path,fileName),content);
              }
          }
          

          BaseProcess介紹:

          該類用于生成靜態文件,調用writerPage方法即可實現,其中有3個變量,變量注釋如下:

          templateName:模板名字,例如item.ftl,模板放到templates目錄下
          path:生成文件的路徑,例如D:/page/html
          name:生成靜態頁文件的名字,例如:1.html
          

          4.3 商品詳情靜態頁生成

          生成商品詳情頁,我們需要提供商品信息(sku),并且將商品數據存儲到數據模型Map中,然后在頁面渲染。

          1)靜態頁生成

          在seckill-page中創建com.seckill.page.service.SkuPageService,添加生成靜態頁方法,代碼如下:

          /***
           * 生成靜態頁
           */
          void itemPage(Map<String,Object> dataMap) throws Exception;
          

          在seckill-page中創建com.seckill.page.service.impl.SkuPageServiceImpl,添加生成靜態頁方法,代碼如下:

          @Service
          public class SkuPageServiceImpl extends BaseProcess implements SkuPageService  {
          
              /***
               * 生成靜態頁
               */
              @Override
              public void itemPage(Map<String,Object> dataMap) throws Exception {
                  dataMap.put("username","王五");
          
                  //生成靜態頁
                  super.writerPage(dataMap);
              }
          }
          

          在seckill-page中創建com.seckill.page.controller.SkuPageController,添加生成靜態頁方法,代碼如下:

          @RestController
          @RequestMapping(value="/page")
          public class SkuPageController {
          
              @Autowired
              private SkuPageService skuPageService;
          
              @Value("${htmlPath}")
              private String htmlPath;
          
              /****
               * 生成商品詳情靜態頁
               */
              @PostMapping(value="/html")
              public Result html(@RequestBody Sku sku) throws Exception {
                  //數據模型
                  Map<String,Object> dataMap=new HashMap<String,Object>();
                  dataMap.put("name",sku.getId()+".html"); //生成靜態頁的文件名字
                  dataMap.put("path",htmlPath);            //文件路徑
                  dataMap.put("templateName","item.ftl"); //模板名字
                  dataMap.put("sku",sku);                  //商品數據
          
                  //生成靜態頁
                  skuPageService.itemPage(dataMap);
                  return new Result(true, StatusCode.OK,"生成成功!");
              }
          }
          

          注意:其中bootstrap.yml中添加htmlPath: D:/page/html配置。

          2)Feign調用

          在seckill-page-api中創建com.seckill.page.feign.SkuPageFeign實現調用,代碼如下:


          主站蜘蛛池模板: 国产一区二区三区不卡在线看 | 日韩欧国产精品一区综合无码| 老熟妇仑乱一区二区视頻| 久久99热狠狠色精品一区| 日韩人妻一区二区三区免费| 色婷婷香蕉在线一区二区| 琪琪see色原网一区二区| 国产精品一级香蕉一区| 国产免费无码一区二区| 无码人妻aⅴ一区二区三区| 国产精品区一区二区三| 国产精品毛片a∨一区二区三区| 国产拳头交一区二区| 午夜福利一区二区三区高清视频| 国产精品福利一区| 日韩精品一区二区三区中文版 | 精品国产一区AV天美传媒| 久久成人国产精品一区二区| 国产亚洲福利一区二区免费看| 国产激情з∠视频一区二区| 精品国产AⅤ一区二区三区4区 | 精品少妇ay一区二区三区| 中文字幕精品亚洲无线码一区| 日韩一区二区三区免费播放| 日本免费一区二区三区最新| 亚洲日韩中文字幕无码一区| 精品不卡一区二区| 亚洲蜜芽在线精品一区| 日日摸夜夜添一区| 欧美一区内射最近更新| 精品一区二区ww| 在线观看国产一区二区三区| 色一乱一伦一区一直爽| 一区二区三区视频观看| 91一区二区三区| 日韩免费无码视频一区二区三区| 亚洲AV本道一区二区三区四区| 免费视频一区二区| 无码中文人妻在线一区二区三区 | 韩国精品福利一区二区三区| 国产伦精品一区二区三区在线观看 |