android实战项目之二十二---如何快速APP中集成支付宝和微信支付功能

news2024/11/18 3:18:46

效果图

实现方案

  1. jcenter 集成方式
    implementation 'com.xgr.easypay:EasyPay:2.0.5'   // 基类库,必选
    implementation 'com.xgr.easypay:wechatpay:2.0.5' // 微信支付,可选
    implementation 'com.xgr.easypay:alipay:2.0.5'    // 支付宝支付,可选

    2. 服务器端提前准备好接口,能保证正常,这个项目php,参考

    public function pay(){	
    
    
    
    	 
    		***************************略
             Db::startTrans();
    		 try{				
    				 Db::name('libu_order')->insert($param);          
                     // 提交事务
                     Db::commit();    
             } catch (\Exception $e) {
                     // 回滚事务
                     Db::rollback();
    				 $this->error("提交失败!"); 
             }
             $payname= $paydata['nickname'];
             $request = Request::instance();
    		 $epay = get_addon_info('epay');
             if ($epay && $epay['state']) {	
                 $notifyurl = $request->root(true) . '/api/spay/epay/type/notify/paytype/' .$payname;
                 $returnurl = $request->root(true) . '/api/spay/epay/type/return/paytype/' .$payname. '/orderid/' . $param['orderNo'];
                 
    			 $params = [
                     'amount'    => $param['amount'],
                     'orderid'   => $param['orderNo'],
                     'type'      => $payname,
                     'title'     => "支付元",
                     'notifyurl' => $notifyurl,
                     'returnurl' => $returnurl,
                     'method'    => "app",                
                 ];
    		 
    		     return \addons\epay\library\Service::submitOrder($params);
             }else {
                //$result = \think\Hook::listen('cms_order_submit', $order);
                if (!$result) {
                    throw new OrderException("请在后台安装配置微信支付宝整合插件");
                }
            }
    
            **************************略		 		 
    		 
    	}

    3.  支付宝和微信支付返回的数据比较特殊,不能进行封装处理,否则一定报错;而且返回的格式气人,所以android端重新封装了请求。

      final static String payurl="改你自己的";
        public static Callback pay(String payType,Callback callback){
            String timeString = UserManager.tokeToken(MyRealApplication.getApplication());
            //1.创建OkHttpClient对象
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .addInterceptor(new TokenInterceptor(timeString))
                    .build();
    
            //2.创建一个RequestBody,可以用add添加键值对
            RequestBody requestBody = new FormBody.Builder()
                    .add("paytype",payType)
                    .add("amount","6")
                    .add("extro","VIP充值")
                    .build();
            //3.创建Request对象,设置URL地址,将RequestBody作为post方法的参数传入
            Request request = new Request.Builder().url(payurl).post(requestBody).build();
            //4.创建一个call对象,参数就是Request请求对象
            okHttpClient.newCall(request).enqueue(callback);
            return  callback;
        }

    4. 支付宝返回的是字符串,可直接使用;微信返回的是个对象,所以需要创建个对象,注意创建对象的时候不能用package这个字段,但是微信支付返回的信息中有这个字段,需要特殊处理下。

    @SerializedName("package")
    public class WeChatBean {
        public String appid;
        public String partnerid;
        public String prepayid;
        public String timestamp;
        public String noncestr;
        public String sign;
        @SerializedName("package")
        public String packagevalue;
    }
    

    5.  按钮支付相应事件pay(),注意使用中,在处理业务过程中,需要放在

    Looper.prepare()和
    Looper.loop()中间,否则报错。
    public void pay(){
            Map<String, String> params = new HashMap<>();
            ***************************
            OkHttpTool.pay(String.valueOf(checkedIds),new Callback() {
                @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                    var responsedata=response.body().string();
                    if(responsedata!=null){
                        
                        Log.d("支付返回", responsedata);
                        Looper.prepare();
                        if(checkedIds==18){
                            alipay(responsedata);
                        }else {
                            Gson gson = new Gson();
                            WeChatBean one = gson.fromJson(responsedata, WeChatBean.class);
                            wxpay(one);
                            Log.d("微信支付返回", one.packagevalue);
                        }
                        Looper.loop();
    
                    }
                    Log.d("onResponse", responsedata);
    
                }
    
                @Override public void onFailure(@NonNull Call call, @NonNull IOException e) {
    
                }
            });
        }

    欢迎大家点赞、收藏、关注、评论、批评啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来

2023亚马逊云科技re:Invent引领科技新潮流&#xff1a;云计算与生成式AI共塑未来 历年来&#xff0c;亚马逊云科技re:Invent&#xff0c;不仅是全球云计算从业者的年度狂欢&#xff0c;更是全球云计算领域每年创新发布的关键节点。 2023年亚马逊云科技re:Invent大会在美国拉斯…

C语言算术转换例题

这里写目录标题 例题一题目解析答案 例题二题目解析答案 例题三题目解析答案 例题四方法一解析方法二解析 例题五答案方法一方法二解析 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#…

golang panic关键词执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时&#xff0c;Go的编译器会将这段…

uniapp视频倍速播放插件,uniapp视频试看插件——sunny-video使用文档

sunny-video视频倍速播放器 组件名&#xff1a;sunny-video 效果图 img1img2img3img4 平台差异说明 目前已应用到APP&#xff08;安卓、iOS&#xff09;、微信&#xff08;小程序、H5&#xff09;其它平台未测试 安装方式 本组件符合easycom规范&#xff0c;HBuilderX 2.5…

JoyT的科研之旅第一周——科研工具学习及论文阅读收获

CiteSpace概述 CiteSpace 是一个用于可视化和分析科学文献的工具&#xff0c;它专门针对研究者进行文献回顾和趋势分析。CiteSpace 的核心功能是创建文献引用网络&#xff0c;这些网络揭示了研究领域内各个文献之间的相互关系。使用 CiteSpace 可以为论文研究做出贡献的几种方…

【迅搜03】全文检索、文档、倒排索引与分词

全文检索、文档、倒排索引与分词 今天还是概念性的内容&#xff0c;但是这些概念却是整个搜索引擎中最重要的概念。可以说&#xff0c;所有的搜索引擎就是实现了类似的概念才能称之为搜索引擎。而且今天的内容其实都是相关联的&#xff0c;所以不要以为标题上有四个名词就感觉好…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

LeetCode Hot100 102.二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(七)

分页查询、删除和修改菜品 1. 菜品分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 设计VO类1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.3.2 前后端联调测试 2. 删除菜品2.1 需求分析…

局域网协议:DNS(Domain Name System,域名系统)详解

文章目录 什么是DNS&#xff1f;DNS的重要性DNS的域名解析过程递归查询迭代查询 DNS解析失败怎么办&#xff1f;为什么DNS需要递归服务器&#xff1f;DNS为什么用UDP&#xff1f;推荐阅读 什么是DNS&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系统&#…

【Unity3D】MAX聚合广告SDK——Pangle广告接入

Pangle, App Monetization Simplified 注册 登录 创建应用 创建广告单元 将其应用ID和广告ID关联到MAX广告。 下载Pangle Unity Plugin包&#xff0c;新建一个空工程&#xff08;很重要&#xff09; Unity版本2019.4.0f1 gradle plugin 4.2.0 gradle版本6.7.1 build_tools 34.…

问题汇总20231124

文章目录 1.练习题错题笔记&#xff1a;2. 串口配置中的无硬件控制流是什么3. 硬件控制流是如何管理数据流的&#xff1f;4. 串口不显示的原因有哪些&#xff1f;5. 中断服务函数中为什么一定要清除中断标志位&#xff1f;6. 中断标志位是什么时候设置的&#xff1f;7. BSRR8. …

探索优雅的处理 JavaScript 类数组对象的技巧

一. 引言 在 JavaScript 编程中&#xff0c;我们经常遇到类数组对象&#xff0c;它们拥有类似数组的结构和行为&#xff0c;但却不具备真正的数组方法和属性。常见的类数组对象包括 DOM 集合、函数的 arguments 对象和字符串等。如果我们想对这些类数组对象进行操作和处理&…

使用 STM32F7 和 TensorFlow Lite 开发低功耗人脸识别设备

本文旨在介绍如何使用 STM32F7 和 TensorFlow Lite框架开发低功耗的人脸识别设备。首先&#xff0c;我们将简要介绍 STM32F7 的特点和能力。接下来&#xff0c;我们将讨论如何使用 TensorFlow Lite 在 STM32F7 上实现人脸识别算法。然后&#xff0c;我们将重点关注如何优化系统…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)

套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型&#xff1a;1.1.2接口设计&#xff1a;1.1.3数据库设计&#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …

元宇宙现已开放!

在 2023 年 11 月 3 日 The Sandbox 首个全球创作者日上&#xff0c;The Sandbox 联合创始人 Arthur Madrid 和 Sebastien Borget 宣布元宇宙已开放&#xff0c;已创作完整体验的 LAND 持有者可以自行将体验发布至 The Sandbox 地图上。 精选速览 LAND 持有者&#xff1a;如果…

实验室信息管理系统源码,LIS系统源码,lis源码

医学检验(LIS)管理系统源码&#xff0c;云LIS系统全套商业源码 随着全自动生化分析仪、全自动免疫分析仪和全自动血球计数器等仪器的使用&#xff0c;检验科的大多数项目实现了全自动化分析。全自动化分析引入后&#xff0c;组合化验增多&#xff0c;更好的满足了临床需要&…

Android Frameworks 开发总结之七

1.修改android 系统/system/下面文件时权限不够问题 下面提到的方式目前在Bobcat的userdebug image上测试可行&#xff0c;还没有在user上测试过. 修改前: leifleif:~$ adb root restarting adbd as root leifleif:~$ adb disable-verity verity is already disabled using …

集「才华」与「美貌」于一身的原型设计利器—摹客RP

文章目录 画原型做设计&#xff0c;用摹客RP就够了 初遇摹客再遇摹客RP摹客RP简介与注册摹客RP的突出亮点1️⃣拥有海量矢量图标&#xff0c;满足各种设计场景2️⃣打造高扩展性组件&#xff0c;打破传统组件编辑模式3️⃣海量摹客RP模板例子随意挑选4️⃣实现多人实时协同&…

【数据结构】什么是栈?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;栈的定义 &#x1f4cc;元素进栈出栈的顺序 &#x1f4cc;栈的抽象数据类型 &#x1f4cc;栈的顺序存储结构 &#x1f4cc;栈的链式存储结构 链栈的进…