首页 > 其他分享 >鸿蒙Next-支付宝SDK接入教程

鸿蒙Next-支付宝SDK接入教程

时间:2024-08-20 18:15:24浏览次数:7  
标签:orderId set obj 鸿蒙 keyValues Next result payInfo SDK

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

如果您想第一时间看我的后期文章,扫码关注公众号

      安辉编程笔记 - 开发技术分享
             扫描二维码加关注

标签:orderId,set,obj,鸿蒙,keyValues,Next,result,payInfo,SDK
From: https://www.cnblogs.com/yishaochu/p/18370015

相关文章

  • ArkUI ARKTS 鸿蒙开发 装饰器
    @State 定义一个变量,可用于本页面的双向绑定 @Prop 定义一个接收参数的变量,随着父组件变化而变化,子组件更改的值会被父组件覆盖(不会更改父组件的值) @Link 定义一个变量,不允许定义值,需要通过父组件传入,可以做到父子组件双向绑定 @Provide装饰器和@Consume装饰器 ......
  • ArkUI ARKTS 鸿蒙开发 @BuilderParam
     @BuilderParam 可以理解成一个html页面的占位符,也可以理解成后端的委托,委托是根据委托的要求传入什么它就执行什么,这个是根据它的要求传入什么就渲染什么1.子页面定义变量      @ComponentexportstructProductItem{@PropProduct:ProductDto;@BuilderP......
  • 智能小程序 Ray 开发面板 SDK —— 多语言 API 汇总
    APIAPI示例中的多语言数据源均来自于下方多语言对象exportdefault{en:{dsc_edit:'Edit',//Basicmultilanguagewithdsc_startandnameitsemanticallydsc_hour:'Hour',dsc_minute:'Minute',dsc_countdown_on:'Turnon......
  • 鸿蒙-JS-第三周day02
    一、带var和不带var的区别带var的时候就是声明变量,不带var的时候,没有变量提升,在全局作用域下,带var还是不带var都是给GO添加了一个属性(也相当于给window),属性名就是此变量,属性值就是变量值console.log(a);//undefinedvara=3;b=6;console.log(window.a);console.l......
  • ControlNeXt: Powerful and Efficient Control for Image and Video Generation(2024,
    ControlNeXt:PowerfulandEfficientControlforImageandVideoGeneration(2024,8)paperGithub进一步在ControlNet上进行了改进,主要针对一下两点对于每一个模块添加一个Zero-Conv也会占用很多显存.Zero-Conv两个模态的输出的mean、var具有差异,导致收敛很慢.针对1,......
  • 重生 之 被裁员后开滴滴之前学习了鸿蒙(part2)
    12.ArkUI-界面1.组件1.定义容器组件(){//内容}基础组件(参数)ps:UI界面构建的最小元素是组件ps:最外层只能有一个容器组件(距离build最近的)2.组件属性方法组件(){}.属性方法1(参数).属性方法2(参数).属性方法3(参数)……ps:若是基本组件可......
  • 鸿蒙开发ArkUI沉浸式导航
    1.沉浸式导航的效果是占用底部顶部或者其他挖孔区域的位置沉浸式的样式 非沉浸式的样式 2.实现方式   有三种实现放   1.全局(Ability)    2.页面   3.指定元素 全局的实现方式(Ability) 在你的Ability中设置 在页面创建......
  • 实现strStr() —— KMP算法(包含next数组的优化)
    目录KMP算法KMP算法的应用前缀表最长公共前后缀为什么要使用前缀表如何计算前缀表前缀表和next数组时间复杂度分析例题28.实现strStr构造next数组 使用next数组来做匹配 前缀表统一减一C++代码实现前缀表(不减一)C++代码实现总结 拓展:next数组的优化 KMP算......
  • 易优CMS网站prenext 获取上一篇、下一篇内容
    【基础用法】名称:prenext功能:获取当前文档上一篇、下一篇内容。语法:{eyou:prenextget='pre'}   上一篇:{$field.title}{eyou:else/}  上一篇:暂无{/eyou:prenext}{eyou:prenextget='next'}   下一篇:{$field.title}{eyou:else/}  下一篇:暂无{/eyou:prenex......
  • 智能小程序 Ray 开发面板 SDK —— 工具方法中时间和转换 SDK 汇总
    时间本文介绍了时间相关工具。秒转时分秒数组名称parseSecond描述将一个基于秒的数转化成固定长度为2的多个字符串。请求参数参数数据类型说明是否必填secondnumber基于秒的数是numnumber字符串长度固定,默认值为2否返回参数参数数据类型说明resultstring个项都是......