鴻蒙Next-支付寶SDK接入教程

来源:https://www.cnblogs.com/yishaochu/p/18370015
-Advertisement-
Play Games

App適配鴻蒙Next,開始做支付功能了,目前來說只有支付寶支持鴻蒙Next,微信還沒上架,但是支付寶官方的文檔跟Demo都很老,下載官方的Demo用最新版的DevEco-Studio導入都不成功。 後面在OpenHarmony三方庫中心倉找到了最新的代碼: https://ohpm.openhar ...


App適配鴻蒙Next,開始做支付功能了,目前來說只有支付寶支持鴻蒙Next,微信還沒上架,但是支付寶官方的文檔跟Demo都很老,下載官方的Demo用最新版的DevEco-Studio導入都不成功。

後面在OpenHarmony三方庫中心倉找到了最新的代碼:

https://ohpm.openharmony.cn/#/cn/detail/@cashier_alipay%2Fcashiersdk

官方Demo地址:

https://alidocs.dingtalk.com/i/nodes/qnYMoO1rWxrkmoj2IOpZR6yaJ47Z3je9?iframeQuery=utm_source%3Dportal%26utm_medium%3Dportal_recent&rnd=0.2928087218087806

代碼實現

首先依賴支付寶SDK,打開終端,cd到項目文件夾,輸入命令,如果ohpm沒有加入環境變數的話需要手動加一下:

ohpm i @cashier_alipay/cashiersdk

把OrderInfoUtil跟SignUtils文件複製到你的項目中來,當點擊界面上的支付按鈕時,先請求伺服器,獲取支付信息,然後調用new Pay().pay(orderInfo, true)進行支付。PayInfo對象所有信息都應該伺服器返回。

///這個支付信息對象的所有值都應該伺服器返回
let obj = new PayInfo();//支付信息
obj.appId = "1111111111111";
obj.orderId = "1111111111"
obj.productName = "1年VIP"
obj.amount = 10
obj.notifyUrl = 'https://www.huawei.com'
obj.rsaPrivate = "MIICXQIBAA"

OrderInfoUtil.getOrderInfo(obj).then(orderInfo=>{
    // orderInfo 由服務端生成
    // 第二個參數 控制是否展示支付寶loading
    new Pay().pay(orderInfo, true).then((result) => {
        let message =
            `resultStatus: ${result.get('resultStatus')} memo: ${result.get('memo')} result: ${result.get('result')}`;
        console.log("支付結果:"+message);

        if (result.get('resultStatus') == '9000') { //支付成功
            console.log("支付成功");
        }else{
            console.log("支付失敗");
        }
    }).catch((error: BusinessError) => {
        console.log(error.message);
    });
})

效果圖

註意事項

官方的Demo是沒有notify_url這個參數的,但是我發現不加上notify_url的話,支付成功不會回調我們的業務伺服器,於是我對比安卓的代碼給加上的,還有notify_url必須要加在method參數後面,因為計算簽名的時候參數key是需要排序的。

如果複製我的OrderInfoUtil類是已經修改過的,如果複製官方Demo中的OrderInfoUtil類需要註意一下。

/**
 * 生成訂單參數Map,這個Key一定要排序,例如b開頭的key一定要寫在c開頭的key前面
 * @param payInfo
 * @returns
 */
static buildOrderParamMap(payInfo:PayInfo): Map<string, string> {
    const keyValues = new Map<string, string>()
    keyValues.set('app_id', payInfo.appId);

    // 商戶網站唯一訂單號
    let orderId =payInfo.orderId;
    if(orderId == undefined || orderId==''){
        orderId = util.generateRandomUUID(true);
    }

    // 不能包含中文,否則加密會有問題。。。。。。。。。。。。
    keyValues.set('biz_content', "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\""+
    payInfo.amount+"\",\"subject\":\""+payInfo.productName+"\",\"body\":\""+
    payInfo.productName+"\",\"out_trade_no\":\"" + orderId +  "\"}");
    keyValues.set('charset', 'utf-8');
    keyValues.set('method', 'alipay.trade.app.pay');
    keyValues.set('notify_url',payInfo.notifyUrl);//支付成功後,支付寶會訪問這個通知URL
    keyValues.set('sign_type', 'RSA2');
    keyValues.set('timestamp', '2016-07-29 16:55:53');
    keyValues.set('version', '1.0');
    return keyValues;
}

源碼下載

https://github.com/ansen666/alipay_harmony_sdk

如果您想第一時間看我的後期文章,掃碼關註公眾號

      安輝編程筆記 - 開發技術分享
             掃描二維碼加關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 今天我們來學習一下 Redis 。Redis 是一個高性能的開源記憶體數據存儲系統,支持多種數據結構,如字元串、列表、集合、有序集合和哈希表。 NoSQL 概述 隨著大數據的興起,數據量的暴增,數據類型的豐富,傳統的關係資料庫在應付動態網站,特別是超大規模和高併發的純動態網站時已經顯得力不從 ...
  • 文 / 興業證券股份有限公司 劉洋 石良生 柳君 李致琪 本文來源於網路,如有侵權,請聯繫刪除 任務調度平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴展,興業證券每日需要進行數以萬計的任務調度,因此,優化和提升任務調度平臺的性能與穩定性至關重要。本文通過 ...
  • ​對各高校即將畢業的學子來說,畢業設計算是在大學里的最後一個大作業。特別是軟體、電腦、電子等相關專業,畢業設計非常講究實操,往往要求實現一個實用的、可用的、易用的軟體系統或手機APP。 不管是軟體還是APP,都要通過編程來實現。對於編程類的畢業設計,既有圖書館管理系統這樣萬年不變的增刪改查軟體,也 ...
  • 寫在前面:本文所述未必符合當前最新情形(包括藍牙技術發展、微信小程式介面迭代等)。 微信小程式為藍牙操作提供了很多介面,但在實際開發過程中,會發現隱藏了不少坑。目前主流藍牙應用都是基於低功耗藍牙(BLE)的,本文介紹相關的幾個基礎介面,並對其進行封裝,便於業務層調用。 藍牙發展 在開發藍牙應用程式之 ...
  • 問題描述 最近發現Flutter中引入像素較大的靜態圖片或者字體導致調試或者打包之後在高刷手機上幀率只有60的問題。 測試設備為小米13,可在開發者選項中直接打開幀率顯示, 也可使用statsfl插件顯示幀率 StatsFl( maxFps: 120, // Support custom FPS t ...
  • 在 C 語言中,記憶體分配主要分為以下幾個區域: 一、棧(Stack) 存儲內容: 局部變數:在函數內部聲明的變數,包括自動變數和函數參數。 函數調用信息:當函數被調用時,會在棧上分配空間來存儲函數的返回地址、參數和局部變數。 特點: 記憶體由編譯器自動管理,分配和釋放非常高效。 空間相對較小,一般幾兆 ...
  • 【HM】華為鴻蒙高級認證資料 目錄【HM】華為鴻蒙高級認證資料判斷題單選題多選題其它 判斷題 【判斷題】每調用一次router.pushUrl()方法,預設情況下,頁面棧數量會加1,頁面棧支持的最大頁面數量為32。正確(True) 【判斷題】首選項preferences是以Key-Value形式存儲 ...
  • 存儲區​ Android 一開始就將存儲區分為內部存儲和外部存儲,對應手機自帶的存儲和可插拔的 sd 卡(可類比於 PC 的硬碟和 U盤)。 內部存儲容量有限,Google 建議 App 數據儘量存儲於外部存儲中。 隨著硬體技術發展,自帶大容量空間的手機開始出現,關於內部存儲的描述逐漸偏離現實了,於 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...