springboot 第 36 話: kafka、JSAPI 決済、nginx、マイクロサービス Feign and flutter Android アプリ開発 2

自分のプロジェクトについて不快な思いをしている原因を考えて、原則をたくさん学ぶのではなく、それを解決してください。技術的な知識を実証するよりも、技術的な能力を実証する方が説得力があります。

実際、問題を解きながら記録することは良い習慣であり、問​​題を解く際の見直しや検索が容易になるだけでなく、問題解決の効率が向上するだけでなく、問題を解いた後にアウトプットを整理することもできます。

フラッタービルドAPK

Flutter では、次の手順を使用して Android アプリケーション (APK ファイル) をパッケージ化して生成できます。

  1. ターミナルで Flutter プロジェクトのルート ディレクトリに移動します。

  2. 次のコマンドを実行して APK ファイルを生成します。

    flutter build apk

    これにより、app-release.apk という名前の APK ファイルが生成され、プロジェクトの build/app/outputs/flutter-apk/ ディレクトリに配置されます。

  3. デバッグ情報を含む APK ファイルを生成する必要がある場合は、次のコマンドを実行できます。

    flutter build apk --debug

    これにより、app-debug.apk という名前の APK ファイルが生成され、これもプロジェクトの build/app/outputs/flutter-apk/ ディレクトリに配置されます。

  4. 特定のビルド モードとターゲット プラットフォーム用の APK ファイルを生成する場合は、次のコマンドを使用できます。

    flutter build apk --target-platform android-arm64

    これにより、ARM64 アーキテクチャ用の APK ファイルが生成されます。 android-arm64 は、android-armandroid-x86android-x64 wait など、サポートされている他のターゲット プラットフォームに置き換えることができます。 。

  5. 署名付きリリース APK ファイルを生成する必要がある場合は、android/app ディレクトリに key.properties ファイルを作成し、ファイル キー情報でそれを構成できます。をクリックしてから、次のコマンドを実行します。

    flutter build apk --release

    これにより、署名されたリリース APK ファイルが生成されます。

APK ファイルを生成する前に、Flutter プロジェクトが Android デバイスまたはシミュレーターに接続されており、必要な依存関係のインストールが実行されていることを確認してください。生成された APK ファイルは、デバイスにインストールして実行することも、Google Play などのアプリ ストアで公開することもできます。

ターゲット aot_android_asset_bundle が失敗しました: IconTreeShakerException: フォントのサブセット化が終了コード -9 で失敗しました。アイコン ツリーの揺れを無効にするには、要求されたフラッター ビルド コマンドに --no-tree-shake-icons を渡します。 FAILURE: ビルドは例外により失敗しました。

このエラーは、Flutter アプリのリリース バージョンをビルドするときに発生したフォントのサブセット化エラーが原因です。フォントのサブセット化は、アプリケーションで実際に使用される文字のみを含むようにフォント ファイルを縮小することで、アプリケーション バンドルのサイズを削減します。ただし、場合によっては、これによって問題が発生する可能性があります。

この問題を解決するには、いくつかのことを試すことができます。

  1. フォントのサブセットを無効にする (フォントのサブセット): エラー メッセージによると、--no-tree-shake-icons パラメータをビルド コマンドに追加して無効にすることができます。アイコン ツリーの揺れ (アイコン ツリーの揺れ) とフォントのサブセット化。例:

    flutter build apk --release --no-tree-shake-icons

    これにより、フォントのサブセット化によって引き起こされる問題が解決される可能性があります。

  2. フォント ファイルを確認する: 問題が解決しない場合は、フォント ファイル自体の 1 つに問題がある可能性があります。プロジェクトで使用されているフォント ファイルを確認し、問題がある可能性があるフォント ファイルを置換または削除してから再構築できます。

  3. Flutter バージョンの更新: この問題は、Flutter バージョンのバグが原因で発生する場合があります。最新の修正と改善を使用していることを確認するには、Flutter を最新バージョンに更新してみてください。

  4. 詳細なログを表示する: ビルド コマンドを実行するときに、--verbose パラメータを追加して詳細なログ出力を取得し、ソースをより深く理解できます。問題 。例:

    flutter build apk --release --no-tree-shake-icons --verbose
  5. Gradle 構成を確認する: 問題が解決しない場合は、プロジェクト内の Gradle 構成を確認して、競合や誤った設定がないことを確認してください。

Alibaba Cloud Object Storage OSS (Object Storage Service) は、最大 99.995% のサービス可用性を提供する、大規模で安全、低コスト、信頼性の高いクラウド ストレージ サービスです。ストレージ コストを完全に最適化するために、さまざまなストレージ タイプを使用できます。

仕様:Basic Edition

トライアル可能台数:1,000台

対象となるトライアル グループ: 製品の新規ユーザーである実名認証されたユーザー。

適用可能なシナリオ: Alibaba Cloud IoT プラットフォームと組み合わせて使用​​することも、顧客の IoT システムと単独で統合することもできます。これは、IoT 端末、特に個人のプライバシー データに関連する端末 (スマート ドア ロック、カメラなど)、金融決済端末 (POS、時計/ブレスレット、充電器など)、およびマスメディア端末 (広告画面、スマート スクリーン)のほか、上流のビジネス データと下流の制御命令に対する強力なセキュリティとコンプライアンスの監督要件を伴うシナリオも含まれます。

製品の特徴:端末側はキャリアの複数のセキュリティレベル、生産ラインフリーの書き込み、軽量でセキュアな接続、国家機密アルゴリズム(SM1/2/4)をサポートしています。

製品機能: エンドツーエンドのセキュリティ保護、デバイス アクセス認証、安全な接続、データ暗号化。

【IoTデバイスの本人認証】

IoTプラットフォーム

IoTプラットフォームは、低コスト、高信頼性、高性能、高セキュリティの利点を備えたフルマネージドのエンタープライズレベルのインスタンスサービスを提供し、自社でIoTインフラを構築することなく、さまざまな主流プロトコルデバイスにアクセスし、10億レベルの機器を管理および運用できます。 . は、EB レベルのデバイス データを保存、バックアップ、処理、分析し、企業がデバイス データとアプリケーション データを迅速に統合し、デバイスのインテリジェントなアップグレードを実現できるように支援します。

クラウドメッセージキューのMQTTバージョン

Cloud Message Queue MQTT バージョンは、モバイル インターネット (MI) およびモノのインターネット (IoT) 分野向けに特別に設計されたメッセージング製品で、ライブ ブロードキャスト インタラクション、金融支払い、スマート ケータリング、インスタント チャット、モバイル アプリ、スマートデバイス、自動車のインターネットなどのシナリオ:MQTT、WebSocket、その他のプロトコルの完全なサポートにより、接続端とクラウド間の双方向通信が実現され、C2C、C2B、B2C 間のメッセージ通信およびその他のビジネスシナリオが可能になります。サポートされており、数千万のデバイスをサポートできます

指定した設定に従って、serverTimezone=GMT%2B8 パラメータを JDBC URL に追加しました。これにより、データベース接続のタイムゾーンが GMT+8 (北京時間) に設定されます。 。これは、データベース内の日時データが正しいタイム ゾーンを使用していることを確認するための一般的な解決策です。これにより、サーバーに展開する際の作成時間が正しくない問題が解決されるはずです。

ただし、潜在的なタイム ゾーンの問題を避けるために、データベース サーバー自体のタイム ゾーン設定も正しいこと、および Java コードで日時が正しく処理されていることを確認してください。 ruoyi バックエンド コードでは、 LocalDateTime または Instant を引き続き使用して日時を表し、必要に応じてタイム ゾーン変換を実行できます。

要約すると、正しいタイムゾーン設定手順は次のとおりです。

  1. データベース接続設定の JDBC URL に serverTimezone=GMT%2B8 パラメータを追加し、データベース接続のタイムゾーンが GMT+8 (北京時間) に設定されていることを確認します。

  2. データベース内の日付/時刻データに関する問題を防ぐために、データベース サーバー自体のタイム ゾーン設定も正しいことを確認してください。

  3. LocalDateTime または Instant を使用して、ruoyi バックエンド コードで日時を正しく処理し、必要に応じてタイムゾーン変換を実行します。

これらの手順を実行すると、サーバーに展開したときに作成時間が正しく表示されるようになります。問題が解決しない場合は、構成をさらに確認し、関連するすべてのコンポーネント (データベース、サーバー、コード) のタイムゾーン設定が一貫していることを確認してください。

  1. サーバーのタイムゾーンを設定する: サーバーのタイムゾーンが正しく設定されていることを確認します。この問題は、サーバーのタイムゾーン構成を変更することで解決できます。たとえば、サーバーが Linux オペレーティング システムを使用している場合は、次のコマンドを実行してタイム ゾーンを設定できます。

    sudo timedatectl set-timezone <时区>

    たとえば、タイムゾーンを北京時間に設定するには、次を使用できます。

    sudo timedatectl set-timezone Asia/Shanghai

    実際の状況に応じて、正しいタイムゾーンを設定してください。

  2. データベースのタイムゾーン設定: データベースのタイムゾーン設定が正しいことを確認してください。データベース内のタイムスタンプ フィールドは、データベース サーバーのタイム ゾーンの影響を受ける可能性があります。この問題は、データベース サーバーのタイム ゾーンを設定することで解決できます。

  3. Java コードのタイム ゾーン処理: Java コード、特に ruoyi バックエンド コードでは、タイム ゾーンが原因で日付と時刻が正しく表示されないように、日付と時刻が正しく処理されていることを確認してください。問題。 。 ruoyi バックエンドのコードでは、 LocalDateTime を使用して現地の日付と時刻を表すか、 Instant を使用して時間を表すことができ、必要に応じてタイム ゾーン変換を実行できます。 。

たとえば、エンティティ オブジェクトを作成するときは、次のように作成時間を設定できます。

import java.time.LocalDateTime;

public class YourEntity {
    private LocalDateTime createTime;

    public void setCreateTime() {
        this.createTime = LocalDateTime.now(); // 使用服务器的当前时间
    }
}

タイムゾーンの問題による誤った時刻表示を避けるために、コード内でタイムゾーン変換を正しく処理していることを確認してください。

モバイル デバイスのブラウザに [APK をダウンロード] ボタンが表示され、クリックすると APK ファイルをダウンロードできます。ダウンロードが完了すると、ユーザーは通知をクリックするか、ファイル マネージャーでファイルを開いてインストールできます。

予防:

  1. APK ファイルが正しくダウンロードされるように、適切な MIME タイプがサーバーに設定されていることを確認してください。

  2. ダウンロード後すぐにユーザーにインストールしてもらいたい場合は、target="_blank" 属性をダウンロード リンクに追加して、新しいタブでダウンロード リンクを開くことができます。

上記の方法は APK ファイルをダウンロードする基本的な方法であることに注意してください。アプリでより高度な配布と管理が必要な場合は、アプリ ストア、サードパーティの配布プラットフォーム、または社内の配布方法の使用を検討することをお勧めします。

SpringCloud に統合された Feign コール

6d1f5cf5f8075177757f74d28a546903.png
画像.png
011aab1d0f0373ab60dd2d6ff6d10ead.png
画像.png
a24d35c2d89eaa2ec9b9d73860bfb186.png
画像.png
66678b7f2ec58630df1409c15255e5d4.png
画像.png
ad67787e71220fdf679e1af897bb4dee.png
画像.png
b98dd5ba1be3455e3e4b096478e6c3ea.png
画像.png
09cc6a0f470b9b69ca34e536cda67853.png
画像.png
9ab90816cd19090d8e183be8455849bb.png
画像.png

https://www.emqx.io/zh/downloads?os=macOS

MacBook-Pro bin % ./emqx start

統計: %R: 不正な形式

警告: デフォルトの (安全でない) Erlang Cookie が使用されています。

警告: /Users/jeskson/Downloads/emqx-5.1.4-macos12-amd64/etc/emqx.conf で node.cookie を構成するか、環境変数 EMQX_NODE__COOKIE からオーバーライドします。

警告: 注: クラスター内のすべてのノードに同じ Cookie を使用してください。

EMQX 5.1.4 が正常に開始されました。

インストールパッケージの種類

**

1

emqx-5.1.4-macos12-amd64.zipSHA256 をダウンロードします。

wget https://www.emqx.com/zh/downloads/broker/5.1.4/emqx-5.1.4-macos12-amd64.zip

2

EMQXをインストールする

mkdir -p emqx && unzip emqx-5.1.4-macos12-amd64.zip -d emqx

3

EMQXを開始する

./emqx/bin/emqx start

MacBook-Pro bin % ./emqx_ctl ステータス

統計: %R: 不正な形式

ノード「[email protected]」 5.1.4が開始されました

ダウンロード

http://127.0.0.1:18083/#/login?to=/dashboard/overview

bin % ./emqx_ctl ブローカー

統計: %R: 不正な形式

システム記述 : EMQX

バージョン : 5.1.4

日時 : 2023-08-14T09:41:56.465827955+08:00

稼働時間 : 6 分 9 秒

https://www.emqx.io/cn/mqtt/public-mqtt5-broker から MQTT ブローカーをダウンロードします。

https://softblade.de/download/

テストツール: MQTT.fx。公式 Web サイト http://mqttfx.jensd.de/index.php/download にアクセスして、対応するバージョンをダウンロードできます。

アリババクラウドの準備

  • アリババクラウドアカウント

  • IoT プラットフォームを開き、パブリック インスタンスを作成します

  • 製品を作成する

  • デバイスを追加

現時点ではデバイスはアクティブ化されていません。トリプレットは物理デバイス上で 1 回実行する必要があり、オンラインになった後にアクティブ化できます。

デバイス証明書の「ProductKey」、「DeviceName」、「DeviceSecret」は重要な情報です。

  • 製品 -> カスタムトピック

MQTTX は、EMQ のオープンソース クロスプラットフォーム MQTT 5.0 クライアント ツールで、macOS、Linux、Windows 上で実行でき、フォーマットされた MQTT ペイロードをサポートします。

MQTTX は、使い慣れたチャットのようなインターフェイスでテスト インターフェイスを簡素化します。複数の同時オンライン MQTT クライアント接続を簡単かつ迅速に作成し、接続のテスト、MQTT/TCP、MQTT/TLS、MQTT/WebSocket、およびその他の MQTT プロトコル機能のパブリッシュおよびサブスクライブ機能を実行します。

MQTT は MQ テレメトリ トランスポートの略です。これは、制約のあるデバイスや低帯域幅、高遅延、または信頼性の低いネットワーク向けに設計された、パブリッシュ/サブスクライブ型の非常にシンプルで軽量なメッセージング プロトコルです。

MQTT ブローカーをローカルで実行するには、IoT 用のオープンソース、クラウドネイティブ、分散型 MQTT ブローカーである EMQX を使用することをお勧めします。

c415f3987c321e75f67aa33d94f43a5d.png
画像.png

MQTT v3.1.1 および MQTT v5.0 をサポート

  • **Windows、macOS、Linuxをサポート

  • **MQTT サーバーへの WebSocket 接続をサポート

  • **一方向/双方向 SSL 認証

  • **カスタム スクリプトはテスト データをシミュレートします

  • **簡体字中国語、英語、日本語、トルコ語をサポート

  • **16 進数、Base64、JSON、平文をサポート

vertx.x mqtt mqtt org.eclipse.paho.client.mqttv3

d80be1fcf5b901d1d0096d4ffeb71f64.png
画像.png
ad804a2f959ef355090a3299e2646d34.png
画像.png
1a1bca87a767810e39113213e7447cd8.png
画像.png
88cc87ed1e25ab2976bcc40de66b75d4.png
画像.png
9617c9d73b8d5ca74c3211fc3e056580.png
画像.png

Cloud Message Queue Kafka バージョンは、Apache Kafka に基づいて Alibaba Cloud によって構築された高スループットで拡張性の高い分散メッセージ キュー サービスであり、ログ収集、監視データ集約、ストリーミング データ処理、オンラインおよびオフライン分析などのシナリオで広く使用されています。ビッグデータ エコシステムに不可欠な製品の 1 つです。Alibaba Cloud はフルマネージド サービスを提供します。ユーザーは導入やメンテナンスの必要がなく、よりプロフェッショナルで、信頼性が高く、安全です。

2839a1d3200803966b6a3be3c53fc60b.png
画像.png
7c614498601617af5ec202a36cba9764.png
画像.png
0716def84a0be58f0fe58162953b2ba3.png
画像.png

Alibaba Cloud Object Storage OSS (Object Storage Service) は、最大 99.995% のサービス可用性を提供する、大規模で安全、低コスト、信頼性の高いクラウド ストレージ サービスです。ストレージ コストを完全に最適化するために、さまざまなストレージ タイプを使用できます。

c11a9658165c956e513574fc411ff11b.png
画像.png
02da5305e78515c5c7b3e099638437db.png
画像.png

https://help.aliyun.com/zh/oss/

Server Load Balancer (略して SLB) は、クラウド ネイティブ時代のアプリケーションの高可用性の基本要素です。トラフィックをさまざまなバックエンド サービスに分散することでアプリケーション システムのサービス スループットを拡張し、単一障害点を排除し、アプリケーション システムの可用性を向上させます。

公式アカウントが支払いに接続されると、JSAPI 支払い製品を使用して、公式アカウント、モーメント、チャット ウィンドウなどの WeChat での支払い回収ニーズを完了できるようになります。

情報の送信

営業許可証、身分証明書、銀行口座などの基本情報をオンラインで提出し、ガイドラインに従って口座認証を完了します。

契約書にサインする

WeChat 支払いチームは 1 ~ 2 営業日以内に審査を完了します。審査に合格したら、オンラインで署名して、さまざまな製品機能を体験してください。

結合シーン

独自の支払い回収を開発する必要がある場合は、販売アカウントを APPID にバインドするか、WeChat 支払いの商用バージョン (開発は必要ありません) を開いて支払い回収を完了する必要があります。

WeChat 支払いにアクセスする

WeChat 支払いにアクセスする

decd6964deb43b7ee16e9cb4f0449b73.png
画像.png
API キーを入力します。API キーは、数字、大文字、小文字を含む 32 文字で構成されます。クリックして SMS 認証コードを取得します。
c04497340d7602f1bc16d7a88d951efa.png
  • b8f97e6fc436974679a7dea0ff7dec25.png

  • SMS 認証コードを入力し、「確認」をクリックするとセットアップが完了します。

販売者のバックエンド システムは、最初に WeChat 支払いの統合注文インターフェイスを呼び出します。WeChat バックエンド システムは、リンク パラメータ code_url を返します。販売者のバックエンド システムは、code_url 値から QR コード画像を生成します。ユーザーは WeChat クライアントを使用してコードをスキャンし、開始します。支払い。注: code_url は 2 時間有効です。有効期限が切れると、コードをスキャンしても支払いを開始できなくなります。

dfe07cda8a30c45c3205abca07d52bcd.png
画像.png

1か所で注文できる

アプリケーションシナリオ

支払いコード支払いシナリオに加えて、販売者システムは最初にこのインターフェイスを呼び出して WeChat 支払いサービス バックグラウンドで前払いトランザクション注文を生成し、正しい前払いトランザクション セッション ID を返し、次にネイティブなどのさまざまなシナリオに従ってトランザクション文字列を生成します。 、JSAPI、APP を使用して支払いを開始します。

ステートマシン

支払いステータスは次のように変化します。

インターフェースリンク

証明書が必要ですか?

いいえ

安全規制

WeChat決済インターフェース署名検証ツール

よくある問題:

2. 有効時間の設定: 通常はすぐに有効になりますが、場合によっては数分遅れる場合があります。エラーが長時間発生する場合は、設定を数回繰り返すことができます。

3. キーの設定は、この販売者アカウントのすべてのインターフェースに影響するため、慎重に設定してください。キーが間違っている疑いがあり、他のインターフェイスへの影響が心配な場合は、最初に設定したものと同じキーを設定してみることができます。

e549d83d038b6d1e611199f203965a7b.png
画像.png

通常の加盟店アクセス

独自の支払い回収を開発する必要がある場合は、販売アカウントを APPID にバインドするか、WeChat 支払いの商用バージョン (開発は必要ありません) を開いて支払い回収を完了する必要があります。

wx.requestPayment({
  // 时间戳
  timeStamp: '',
  // 随机字符串
  nonceStr: '',
  // 统一下单接口返回的 prepay_id 参数值
  package: '',
  // 签名类型
  signType: '',
  // 签名
  paySign: '',
  // 调用成功回调
  success () {},
  // 失败回调
  fail () {},
  // 接口调用结束回调
  complete () {}
})

具体的な方法:

  • 小さなプログラムを開き、クリックして直接注文します

  • wx.login はユーザーの一時的なログイン認証コードを取得し、openId と引き換えにバックエンド サーバーに送信します。

  • 注文の際、ミニ プログラムは購入した製品 ID、製品数量、およびユーザーの openId をサーバーに送信する必要があります。

  • サーバーは商品ID、商品数量、openIdを受信後、サービス期間の注文データを生成すると同時に、特定の署名アルゴリズムを通じてWeChat Payにリクエストを送信し、前払い注文情報(prepay_id)を取得します。同時に、取得されたデータは対応するルールに従って再度処理され、ミニプログラムに署名し、必要な情報を記入して応答します。

  • 対応するパラメータを取得した後、アプレットは wx.requestPayment() を呼び出して WeChat 支払いを開始し、支払いワークベンチを起動して支払いを実行します。

  • その後の一連の操作はユーザーがWeChat決済のパスワードや指紋などの認証を行い、決済を確認した後、認証を行って決済を開始します。

  • 認証による支払い: 認証は WeChat バックグラウンドで実行され、WeChat バックグラウンドは支払い結果をフロント エンドに直接返します。フロント エンドは返されたデータを受信した後、支払い結果を表示します。

  • 支払い結果のプッシュ: WeChat バックエンドが支払い結果をフロントエンドに返した後、バックエンドにも支払い結果が返され、バックエンドはこの支払い結果を使用して注文のステータスを更新します。

Java对象——PO,VO,DAO,BO,POJO

d97c9db00d928185c6bcb2d142a6e53b.png
画像.png

マーチャント API 証明書とは何ですか?マーチャント API 証明書を取得するにはどうすればよいですか?

https://kf.qq.com/faq/161222NneAJf161222U7fARv.html

JSAPI決済アクセス前の準備

1. WeChat Pay へのアクセスを申請するにはお金がかかりますか?

申請手数料: なし
取引サービス手数料: 販売者の業種に応じて、0.6% ~ 1% の範囲
レートと決済サイクルの説明: https://kf.qq.com/faq/140225MveaUz1501077rEfqI.html

2. どこに申請すればよいですか?

WeChat 決済販売者プラットフォーム:

3. APP、公式アカウント、ミニプログラムなど複数のアプリケーションがありますが、マーチャントアカウントはいくつ申請する必要がありますか?

1 つの販売アカウントを申請するだけで、すべてが同じ販売アカウントに関連付けられます。

4. 支払いドッキング用のコードを記述する必要がありますか?

ほとんどの支払いでは、販売者は開発能力を備え、コードの調査と開発を行う必要があります。
WeChat 支払いの商用バージョンなど、開発を必要としない支払いもあります。

5. WeChat 支払いを申請するにはどのようなビジネス情報が必要ですか?

通常、営業許可証、公的な口座番号、法人証明書などが必要となります。

6. さまざまな WeChat 支払いドッキングにはどのようなプラットフォームや Web サイトが関与していますか?

WeChat 販売者プラットフォーム (販売者アカウント):
WeChat パブリック プラットフォーム (公式アカウント、ミニ プログラム):
エンタープライズ WeChat プラットフォーム:

2. 【シーンセレクション】

これには、ビジネス シナリオに基づいて、対応する WeChat 支払いへのアクセスを申請する必要があります。
公式ガイドラインのスクリーンショット:

シーン 前提 ドッキング決済 開発が必要かどうか 書類のアドレス
オフラインの場所
決済コード決済 必要


JSAPI支払い 必要


WeChat決済ビジネス版 不要
一般公開なし WeChat 認証が完了しました (サービス アカウント、政府機関またはメディア サブスクリプション アカウント)。 JSAPI支払い 必要 開発ドキュメント
アプレット WeChat認定のミニプログラム。 ミニプログラムのお支払い 必要 開発ドキュメント
パソコンサイト Web サイトのドメイン名は ICP に登録されています。 JSAPI支払い 必要 開発ドキュメント


ネイティブ支払い 必要 開発ドキュメント
アプリ WeChatオープンプラットフォーム上でAPPを作成すると、プラットフォームは認証されています。 アプリ決済 必要 開発ドキュメント
エンタープライズ WeChat エンタープライズ WeChat プラットフォームは登録されており、プラットフォームは認定されています。 従業員に赤い封筒を送る 必要 開発ドキュメント


従業員に給与を支払う 必要 開発ドキュメント


従業員から代金を徴収する 必要 開発ドキュメント
モバイル Web サイト (非 WeChat 環境)
H5支払い 必要 開発ドキュメント

3. 【業務プロセス】

ビジネス実装ロジックの簡単な説明。
一般的なプロセス:
販売者システム: さまざまなプロセス (予約注文、QR コードなど) を通じて、支払いページがユーザーに表示されます。< a i=3>ユーザー: 支払い;WeChat システム: 販売サーバーに非同期的に通知;販売システム: ユーザー支払いのフォローアップを処理します。


JSAPI 決済を例に挙げると、下の写真は公式のものです。

yum install -y ntp          #安装时间同步服务(组件)
ntpdate asia.pool.ntp.org   #设置同步服务器,asia.pool.ntp.org是台警大授时中心(台湾)
date                        #查看当前时间www
date時間を変更してください
  • 現在時刻を表示する
    date

修改时区
1.tzselect

サーバーのハードウェア時間を表示する

使用 sudo hwclock --showサーバー ハードウェア時間の表示

sudo timedatectl set-local-rtc 0


https://kafka.apache.org/downloads


https://kafka.apache.org/downloads



版本:  
<dependency>  
<groupId>org.apache.[spark]()**</groupId>  
<artifactId>spark-streaming_2.12</artifactId>  
<version>3.2.1</version>  
</dependency> <dependency>  
<groupId>org.apache.spark</groupId>  
<artifactId>spark-core_2.12</artifactId>  
<version>3.2.1</version>  
</dependency>  
  
<dependency>  
<groupId>org.apache.spark</groupId>  
<artifactId>spark-sql_2.12</artifactId>  
<version>3.2.1</version>  
</dependency> <dependency>  
<groupId>org.apache.spark</groupId>  
<artifactId>spark-sql-kafka-0-10_2.12</artifactId>  
<version>3.2.1</version>  
</dependency>  
  
<dependency>  
<groupId>org.apache.spark</groupId>  
<artifactId>spark-streaming-kafka-0-10_2.12</artifactId>  
<version>3.2.1</version>  
</dependency>
  1. RTC 時間を現地時間と一致するように設定します。

    次のコマンドを使用して、RTC 時間をローカル時間と一致するように設定します。これらのコマンドを実行するには管理者権限が必要であることに注意してください。

    sudo timedatectl set-local-rtc 1

    これにより、RTC 時間を現地時間として扱うようにシステムに指示されます。

  2. 世界時と現地時間を同期します。

    次のコマンドを使用して、世界時を現地時間と一致するように設定できます。

    sudo timedatectl set-timezone Asia/Shanghai

    上記のコマンドは、タイムゾーンを北京時間のタイムゾーンであるアジア/上海に設定します。

  3. サーバーを再起動するか、時刻を同期します。

    変更を確実に有効にするには、サーバーを再起動するか、次のコマンドを使用して時刻を同期します。

    sudo systemctl restart systemd-timesyncd

    あるいは、システムが NTP サービスを使用して時刻を同期している場合は、次のコマンドを実行できます。

    sudo systemctl restart ntp

コマンドはオペレーティング システムのバージョンと構成によって異なる場合があることに注意してください。変更を加える前に必ずバックアップを作成し、加えた変更の影響を必ず理解してください。操作について不明な点がある場合は、システム管理者またはテクニカル サポート担当者に相談することをお勧めします。

世界時: 変更

サーバーの世界時 (UTC 時間) を変更する場合は、通常、システムのハードウェア クロック (RTC) を変更する必要があります。通常、これには管理者権限が必要です。 Linux システムで世界時を変更する手順は次のとおりです。

  1. NTP サービスを停止します。

    ハードウェア クロックを変更する前に、変更したクロックとの競合を防ぐために、実行中の NTP (ネットワーク タイム プロトコル) サービスを停止する必要がある場合があります。

    bashCopy code
    sudo systemctl stop ntp
  2. ハードウェア クロック (RTC) 時間を変更します。

    次のコマンドを使用して、ハードウェア クロック (RTC) 時刻を希望の世界時刻に設定します。日付と時刻を設定したい値に置き換える必要があることに注意してください。

    sudo date -s "2023-08-15 06:05:01"

    このコマンドは、ハードウェア クロックを 2023 年 8 月 15 日の 06:05:01 に変更します。

  3. システム時刻を同期します。

    次のコマンドを使用して、システム時刻をハードウェア クロックと同期させます。

    sudo hwclock --systohc

    これにより、システム時間がハードウェア クロックと一致するように設定されます。

  4. NTP サービスを開始します。

    以前に NTP サービスを停止した場合は、時刻同期を確実にするために再起動します。

    sudo systemctl start ntp

これらのコマンドは、オペレーティング システムのバージョンと構成によって異なる場合があることに注意してください。時計を変更する前に、必ずバックアップを作成し、変更の影響を必ず理解してください。操作について不明な点がある場合は、システム管理者またはテクニカル サポート担当者に相談することをお勧めします。

ntp.service ユニットがサーバー上に見つからない場合は、システムが chronyd などの別の時刻同期サービスを使用している可能性があります。一部のシステムでは、 chronyd が従来の NTP サービスを置き換えます。

時刻の同期に chronyd を使用する場合は、Linux システムで時刻を設定して同期する手順を次に示します。

  1. まだインストールされていない場合は、インストール chronyd :

    Linux ディストリビューションに適したパッケージ管理ツールを使用してインストールしますchronyd

    CentOS/RHEL の場合:

    sudo yum install chrony

    Ubuntu/Debian の場合:

    sudo apt-get install chrony
  2. 启动和配置 chronyd

    サービスを開始chronydし、自動的に開始するように設定します。

    sudo systemctl start chronyd
    sudo systemctl enable chronyd
  3. 時間設定を変更します。

    次のコマンドを使用して、システム時刻とハードウェア クロックを希望の世界時刻に設定します。日付と時刻を設定したい値に置き換えてください。

    sudo chronyd -q 'server 0.pool.ntp.org iburst'
    sudo chronyd -a makestep

    これにより、システム時刻が同期され、ハードウェア クロックが設定されます。

  4. 時刻の同期ステータスを確認します。

    次のコマンドを使用して、時刻同期ステータスを確認します。

    chronyc tracking

    これにより、時刻同期に関する情報が表示されます。

上記の手順は chronyd を使用するシステム向けであることに注意してください。システムで別の時刻同期ツールを使用している場合は、そのツールのドキュメントに従ってください。いずれにせよ、サーバー時間を変更する前に必ずバックアップを作成し、変更による影響を確実に理解してください。

サーバーの時刻を設定するには、管理者権限が必要です。 Linux システムで時刻を設定する手順は次のとおりです。

  1. date コマンドを使用して時刻を設定します。

    ターミナル ウィンドウを開き、次のコマンドを使用してサーバーの時刻を希望の世界時刻に設定します。日付と時刻を設定したい値に置き換えてください。

    sudo date -u --set "2023-08-16 01:52:38"

    -uこのパラメータは、世界時の使用を示します。

  2. ハードウェアクロックを同期します:

    システム時刻を設定した後、ハードウェア クロックを同期して設定時刻と一致させる必要もあります。次のコマンドを使用して、システム時刻をハードウェア クロックに書き込みます。

    sudo hwclock --systohc --utc

    --systohc はシステム クロックからハードウェア クロックに同期することを意味し、 --utc は世界時を使用することを意味します。

    時間設定を確認します。

    次のコマンドを使用して、サーバーの時刻設定を確認します。

    date

    これにより、現在のシステム時間が表示されます。

これは主に UTC 時間の問題です。UTC: Universal Standard Time。中国標準時は東第 8 地区にあり、それより 8 時間遅れています。

mysqlデータベースが作成された後。デフォルトのタイムゾーンは、東第 8 地区より 8 時間短くなります。 SQL ステートメントで mysql 時間が使用されている場合、通常の時間より 8 時間短くなります。したがって、mysql のシステム タイム ゾーンを変更する必要があります。 set global time_zone = '+8:00';タイムゾーンを設定して東巴地区に変更します フラッシュ権限; リフレッシュ権限

または、構成ファイルに追加します。

spring.jackson.time-zone=GMT+8

画像.png

timedatectl set-local-rtc 0

「%time_zone%」のような変数を表示します。

フラッシュ権限; #すぐに有効になります

@JsonFormat(パターン="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

グループに参加して著者に連絡してください vx: xiaoda0423

ウェアハウスのアドレス: https://github.com/webVueBlog/JavaGuideInterview

おすすめ

転載: blog.csdn.net/qq_36232611/article/details/132798000