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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse项目移到idea上部署运行

1.配置web模块 另外&#xff0c;模块这里&#xff0c;也要加上Spring 2.配置Artifact &#xff08;用于tomcat&#xff09; 就是从上面配置的web模块&#xff0c;产生的工件 3.添加lib 一般是在web-inf/lib &#xff0c; 遇到的坑&#xff1a; jdk版本问题&#xff0c;这里…

micro_ros需要用到的hardware

我没有那么长的线啊&#xff0c;所以就用一个4块5的usb转串口看看 没有那么高档的开发板&#xff0c;就用主流的STM32F103C8T6试试看 这应该就是个仿真器了&#xff0c;一个字不认得都能够看的出来吧

php的字符转义函数有那些,是干什么的

在 PHP 中&#xff0c;字符转义函数是用于处理字符串中的特殊字符&#xff0c;以防止这些字符被误解、滥用或引起安全问题的一组函数。这些函数的主要作用是确保在将用户提供的数据插入到数据库、构建 HTML 输出或进行其他与安全相关的操作时&#xff0c;不会导致潜在的安全漏洞…

常见树种(贵州省):018栎灌、油茶、火棘、铁仔、小檗、勾儿茶、马桑、车桑子、山苍子、楮

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、茅栗 …

一个正整数转为2进制和8进制,1的个数相同的第23个数是什么?

package cn.com;import java.lang.*;//默认加载public class C2 {//10进制转8进制static int HtoO(int n){int cnt 0;while(n!0){cntn%8;n/8;}return cnt;}//10进制转2进制static int HtoB(int n){int cnt 0;while(n!0){cntn%2;n/2;}return cnt;}public static void main(Str…

Azure Machine Learning - Azure可视化图像分类操作实战

目录 一、数据准备二、创建自定义视觉资源三、创建新项目四、选择训练图像五、上传和标记图像六、训练分类器七、评估分类器概率阈值 八、管理训练迭代 在本文中&#xff0c;你将了解如何使用Azure可视化页面创建图像分类模型。 生成模型后&#xff0c;可以使用新图像测试该模型…

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

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

【JavaFx】利用JavaFX写一个用户注册页面

以下是一个简单的JavaFX用户注册页面的示例代码&#xff1a; import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Tex…

振弦式土压力计在岩土工程安全监测应用的方案

振弦式土压力计在岩土工程安全监测应用的方案 振弦式土压力计是一种常见的土压力测量仪器&#xff0c;其原理是利用振弦在土中传播的速度与土的应力状态有关的特点测量土压力。在岩土工程安全监测中&#xff0c;振弦式土压力计可以应用于以下方面&#xff1a; 1. 地下连续墙和…

设计测试用例的具体方法总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️白马沉河共歃誓&#xff0c;怒涛没城亦不悔 ☁️基于需求进行测试用例的设计 基…

进制转换 蓝桥oj Alice和Bob的爱恨情仇

题目 翻译 主要思路 举个例子方便理解 以奇数为底去分解一个奇数&#xff0c;分解次数一定是奇数&#xff1b;以奇数为底去分解一个偶数&#xff0c;分解次数一定是偶数 如果一个堆的分解次数是奇数&#xff0c;就在总分解次数上加1&#xff1b;如果一个堆的分解次数是偶数&…

25 Linux I2C 驱动

一、I2C简介 I2C老朋友了&#xff0c;在单片机里面也学过&#xff0c;现在再复习一下。I2C使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线)&#xff0c;另外一条是 SDA(串行数据线)&#xff0c;这两条数据线需要接上拉电阻&#xff0c;总线空闲的时候 SCL…