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

效果图

实现方案

  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) {
    
                }
            });
        }

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vivado产生报告阅读分析21

其他命令选项 • -of_objects <suggestion objects> &#xff1a; 启用特定建议的报告。在此模式下运行时 &#xff0c; report_qor_suggestions 不会生成新建议。此命令可快速执行 &#xff0c; 读取 RQS 文件后 &#xff0c; 此命令可用于查看其中包 含的建议。其…

[JVM] 京东一面~说一下Java 类加载过程

系统加载 Class 类型的文件主要三步&#xff1a;加载->连接->初始化。连接过程又可分为三步&#xff1a;验证->准备->解析。 通过全限定名来加载生成 class 对象到内存中&#xff0c;然后进行验证这个 class 文件&#xff0c;包括文件格式校验、元数据验证&#xf…

从零开始学习管道:进程通信的概念,特点和示例

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容通过进程通信的概念&#xff0c;引入管道&#xff0c;实…

Leetcode201. 数字范围按位与

Every day a Leetcode 题目来源&#xff1a;201. 数字范围按位与 最直观的解决方案就是迭代范围内的每个数字&#xff0c;依次执行按位与运算&#xff0c;得到最终的结果&#xff0c;但此方法在 [left, right] 范围较大的测试用例中会因超出时间限制而无法通过&#xff0c;因…

linux开启apache服务

vim /etc/apache2/ports.conf 键盘输入i 进入插入编辑模式&#xff0c;修改apache2默认监听端口号为8080 &#xff0c;编辑好后&#xff0c;按Esc键“&#xff1a;wq!” 保存退出。&#xff08;注&#xff1a;端口也可以不修改&#xff09; 在终端输入“/etc/init.d/apache2 …

【JVM】一篇通关JVM垃圾回收

目录 1. 如何判断对象可以回收1-1. 引用计数法1-2. 可达性分析算法1-3. 四种引用强引用软引用弱引用虚引用终结器引用 2. 垃圾回收算法3. 分代垃圾回收4. 垃圾回收器5. 垃圾回收调优 1. 如何判断对象可以回收 1-1. 引用计数法 引用计数法 只要一个对象被其他变量所引用&…

qgis添加arcgis的FeatureServer

左侧浏览器-ArcGIS要素服务器-新建连接 http://sampleserver6.arcgisonline.com/arcgis/rest/services/ 展开-双击即可

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(三)

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(三) 不使用base64编码方式传递 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filter…

Linux的gcc,gdb基础

执行详解: 1)如何执行 路径可执行文件名 或者 路径可执行文件名 & (将进程放到后台执行); 可以把可执行文件放到 /usr/bin 就可以省略路径了; 思考:为什么? ps :/usr/bin ps,ls,pwd (先了解,后期写项目就知道为什么了) 2)两步执行与一步执行 a.可以三步合为一步,即…

中职组网络安全-FTPServer20221010.img(环境+解析)

任务环境说明&#xff1a; √服务器场景&#xff1a;FTPServer20221010.img √服务器操作系统&#xff1a;未知&#xff08;关闭链接&#xff09; √FTP用户名&#xff1a;attack817 密码&#xff1a;attack817 1.分析attack.pcapng数据包文件&#xff0c;通过分析数据包attack…

MIT6.824-Raft笔记:Raft初探、副本间log时序

从宏观角度说明raft在程序中的作用&#xff0c;和客户端的关系&#xff0c;以及多个副本之间的关系&#xff1b;从微观角度说明多个副本之间raft对日志处理的流程。 1. Raft 初探 宏观角度说明raft在程序中的作用&#xff0c;和客户端的关系&#xff0c;以及多个副本之间的关…

群晖(Synology)NAS 存储池修复需要的时间

群晖&#xff08;Synology&#xff09;NAS 存储池的处理可以说是非常耗时的。 根据官方文档的说明和算法&#xff1a; 一个 10TB 的存储池修复将会差不多 24 个小时。 如果你更换硬盘后对存储池进行处理的话&#xff0c;通常需要等上个几天时间吧。 群晖&#xff08;Synology…

Tabular特征选择基准

学术实验中的表格基准通常是一小组精心选择的特征。相比之下,工业界数据科学家通常会收集尽可能多的特征到他们的数据集中,甚至从现有的特征中设计新的特征。为了防止在后续的下游建模中过拟合,数据科学家通常使用自动特征选择方法来获得特征子集。Tabular特征选择的现有基准…

JVM 内存分析工具 MAT及实践

线程分析工具 MAT 官网下载地址&#xff1a;http://www.eclipse.org/mat/downloads.php mat百度网盘链接&#xff1a;&#xff08;速度更快&#xff09; 链接&#xff1a;https://pan.baidu.com/s/1tMp8MQIXuPtg9zBgruO0Ug?pwdjqtv 提取码&#xff1a;jqtv jdk17 百度网盘链接…

HCIP-八、路由引入

八、路由引入 实验拓扑实验需求及解法1.配置所有设备的IP地址。2.R1/2/3/4运行OSPF3.R3/4/5运行IS-IS4.在R3/4上将OSPF 1引入IS-IS5.在R3/4上将IS-IS引入OSPF6.路径优化 实验拓扑 实验需求及解法 本实验模拟OSPF与IS-IS互联的网络环境&#xff0c;完成以下需求&#xff1a; 1…

vivado产生报告阅读分析22

“ Advanced ”选项卡 “ Advanced ” &#xff08; 高级 &#xff09; 选项卡如下图所示。 在“ Advanced ”选项卡中提供了以下字段 &#xff1a; • “ Report ” &#xff08; 报告 &#xff09;&#xff1a; 选中“ Advanced ”选项卡中的“ Cells to Analyze ” &…

Flink Flink中的分流

一、什么是分流 所谓“分流”&#xff0c;就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个DataStream&#xff0c;定义一些筛选条件&#xff0c;将符合条件的数据拣选出来放到对应的流里。 二、基于filter算子的简单实现分流 其实根据条件筛选数据的需求…

lvm 扩容根分区失败记录

lvm 扩容根分区失败记录 1、问题描述2、错误描述3、解决方法重启系统进入grub界面&#xff0c;选择kernel 2.x 启动系统。然后同样的resize2fs命令扩容成功。 1、问题描述 根分区不足。 系统有2个内核版本&#xff0c;一个是kernel 2.x&#xff0c;另一个是kernel 4.x。 这次l…

《微信小程序从入门到精通》---笔记1

小程序&#xff0c;我又来学习啦&#xff01;请多关照~ 项目驱动 小程序开发建议使用flex布局在小程序中&#xff0c;页面渲染和业务逻辑是分开的&#xff0c;分别运行在不同的线程中。Mini Program于2017年1月7号正式上线小程序的有点&#xff1a;跨平台、开发门槛低、开发周…

盘点60个Python爬虫源码Python爱好者不容错过

盘点60个Python爬虫源码Python爱好者不容错过 爬虫&#xff08;Spider&#xff09; 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1JWrDgl46_ammprQaJiKqaQ?pwd8888 提取码&#xff…