安卓开发者都应该有一个属于自己的APP发布到市场,可以完善自己的技术站之外,加入广告,还可以有一份小收入。
但是这个年代,各家的应用市场是不欢迎带广告sdk的个人开发者应用的。还好我们可以用插件技术加入广告sdk,或者直接想一种方面实现打赏功能,让用户通过支付宝或微信转账到自己账户。

安卓个人开发者如果如果想着App里实现支付打赏功能,嵌入sdk不说成本大外,基本是过不了市场审核的。那么我们可以利用有限资源,封装组件实现一个mini型的打赏功能。

一、支付宝转账分析

支付宝的转账和支付功能,都可以通过二维码打开相关的支付页面,并且用浏览器扫一扫后也是可以正常呼起正常支付页面的。那么我们简单分析下,支付宝的二维码整个跳转肯定不需要相关集成sdk的,那么到底什么样的数据格式可以做到的?

在支付宝个人信息页,找到 我的二维码,截图自己的支付宝二维码,识别下,得到以下信息:

二维码在线解析

可以看到支付宝的支付二维码就是一个普通的http url, 然后它主要信息就存在后缀字符: apafm3kp91df7yo517 里。

https://qr.alipay.com/apafm3kp91df7yo517

网上查询后,发现果然可以通过scheme去打开支付宝转账页面。参考

于是马上动手实现,验证scheme方式是有效的。剩下的就是怎么封装下方面调用。

二、微信转账分析

有了支付宝的转账经验,我们同样从二维码信息入手,发现微信随着版本更新,会有很多验证,直接用scheme调微信,会打开微信的一个空白网页。

分析

然后研究里下微信支付sdk,发现在接口调用的时间需要商户id,及appsecret等信息验证,这就意味这我们单纯的没有任何身份信息去调起微信支付是不可能的。
那么我们退而求其次,用引导方式帮用户直接打开微信扫一扫页面,文案引导用户从相册打开二维码,然后支付。

下一步,就是找到打开微信扫一扫的方法。

    private void toWeChatScan() {try {//利用Intent打开微信Uri uri = Uri.parse("weixin://dl/scan");Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);} catch (Exception e) {//若无法正常跳转,在此进行错误处理Toast.makeText(DinpayWeChatActivity.this, "无法跳转到微信,请检查您是否安装了微信!", Toast.LENGTH_SHORT).show();}}

以上是网上推荐的方法,那么很不幸的是,这种方法估计在很早之前版本可以,但是现在这种方法是无效的

那么是不是高版本就没有方法里呢?继续google,发现以下方法是可行的:

  /*package*/ static void startWechatScan(Context c) {Intent intent = new Intent();intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI"));intent.putExtra("LauncherUI.From.Scaner.Shortcut", true);intent.setFlags(335544320);intent.setAction("android.intent.action.VIEW");if (MiniPayUtils.isActivityAvailable(c, intent)) {c.startActivity(intent);} else {Toast.makeText(c, "未安装微信~", Toast.LENGTH_SHORT).show();}}

二维码微信相册保存

实现微信扫一扫跳转后,用户在从相册选择二维码时,怎么样才能一眼选出我们的目标转账二维码呢?

观察发现微信的二维码选择相册是按照时间顺序排序,那么只要我们的图片生成时间最新就可以排在第一位,每次新生成截图保存即可。

相关图片生成及相册保存逻辑如下:

    /*package*/static void startWeZhi(Context c, View view) {File dir = c.getExternalFilesDir("pay_img");if (dir != null &&!dir.exists() && !dir.mkdirs()) {return;} else {File[] f = dir.listFiles();for (File file : f) {file.delete();//删除旧截图,每次用新截图,保证相册排序。}}String fileName = System.currentTimeMillis() + "weixin_qa.png";File file = new File(dir, fileName);if (!file.exists()) {file.delete();}snapShot(c, file, view);startWechat(c);}/*** 截图保存逻辑*/private static void snapShot(Context context, @NonNull File file, @NonNull View view) {Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas();canvas.setBitmap(bitmap);view.draw(canvas);FileOutputStream fos = null;boolean isSuccess = false;try {fos = new FileOutputStream(file);//通过io流的方式来压缩保存图片isSuccess = bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);fos.flush();} catch (Exception e) {e.printStackTrace();} finally {MiniPayUtils.closeIO(fos);}if (isSuccess) {ContentResolver contentResolver = context.getContentResolver();ContentValues values = new ContentValues(4);values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");values.put(MediaStore.Images.Media.ORIENTATION, 0);values.put(MediaStore.Images.Media.TITLE, "捐赠");values.put(MediaStore.Images.Media.DESCRIPTION, "捐赠二维码");values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());values.put(MediaStore.Images.Media.DATE_MODIFIED,System.currentTimeMillis()/1000);Uri url = null;try {url = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); //其实质是返回 Image.Meida.DATA中图片路径path的转变而成的uriOutputStream imageOut = contentResolver.openOutputStream(url);try {bitmap.compress(Bitmap.CompressFormat.PNG, 100, imageOut);} finally {MiniPayUtils.closeIO(imageOut);}long id = ContentUris.parseId(url);MediaStore.Images.Thumbnails.getThumbnail(contentResolver, id, MediaStore.Images.Thumbnails.MINI_KIND, null);//获取缩略图} catch (Exception e) {if (url != null) {contentResolver.delete(url, null, null);}}}}

这里涉及到屏幕截图保存逻辑,需要指定截图范围,保存后,还需要通知系统媒体数据库(微信图片的获取应该是读取的系统媒体库),保证数据更新。

三、封装sdk

既然可以实现免sdk的支付打赏功能,那么我们把这个功能封装成一个sdk,方便项目的植入。

那么本者 方便引入、简单使用,体验好等原则,实现了MiniPay开源项目

项目把微信和支付宝集成了一个支付页面,点击背景可切换打赏途径。


只要一行代码即可引入自己项目

     compile 'com.canking.minipay:minipay:1.0.x'

只要一行即个启动MiniPay打赏组件

     MiniPayUtils.setupPay(this, config);

代码完全开放,源码传送门,可以完全自定意逻辑。

——-——————
欢迎转载,请标明出处:常兴E站 www.canking.win

免sdk实现微信/支付宝转账打赏功能相关推荐

  1. php公众号提现功能,微信公众号打赏的钱怎么提现_微信公众号打赏功能_微信公众号打赏从哪里取出来...

    微信公众号打赏的钱怎么提现,微信公众号打赏功能.微信公众号之前打赏功能可以立即取现,但是最近出现了一些变动,会有人问微信公众号打赏为什么不能立刻取现?小编为大家带来了微信公众号打赏取现时间调整. 微信 ...

  2. 支付宝微信推出高速收费新服务器,比ETC更顺畅,微信支付宝上线新功能,高速收费不再等待...

    [天极网网络频道]每当将车开到高速收费站,排长队等待进站的时候,总后悔一件事:为什么没办ETC.诚然,在应对高速收费关卡的时候,ETC总是能先人一步,而现金支付的需要排着长长的队伍,让人头疼不已.然而 ...

  3. 社区折腾日志:基于python搭建个人微信/支付宝免签支付功能

    前言 最近给自己开发的市肥宅中心二次元社区添加了自助充值肥宅币功能,也就是充值积分的功能.由于网站是个人无备案,所以对接微信支付比较麻烦,于是就找了第三方免签支付平台来开发该功能. 之前一直觉得给网站 ...

  4. php 微信打赏功能,微信打赏是什么功能?微信怎么打赏?

    大家都知道现在微信开通了打赏功能,很多人都想利用打赏功能来获得收益,那么这个微信打赏是什么功能,微信打赏功能是什么,微信打赏功能怎么用很多人却是不知道的,那下面小编就给大家具体说说这个步骤,记得来看看 ...

  5. 支付宝可以给微信好友转账了?这项新功能体验没那么简单

    导读:阿里.腾讯两大生态何时能打通? 作者 | 第一财经 亓宁 日前,不少网友发现了支付宝的一项新功能:向微信好友转账. 这一话题在10月16日一度登上微博热搜,不过不少人亲自体验后表示,这个功能&q ...

  6. 《如何在WordPress上添加微信/支付宝打赏功能》

    场景:经常在微博或者微信上看见好的文章下面有"赏"这个小工具,也想在自己的网站上弄一个.我的网站 需求:博文下面有"赏"字,可以通过鼠标悬停,显示个人的支付宝/ ...

  7. #WordPress小技巧#纯代码为自己博客添加支付宝/微信打赏功能

    原文:https://www.wn789.com/13323.html 很多人的WordPress博客在文章尾部都有打赏功能,让读者可以直接通过扫描微信.支付宝二维码进行赞助,毕竟维护博客,编写博文需 ...

  8. 站长必备工具-网站添加微信/支付宝打赏功能,任意网站通用无须插件

    在网友博客中经常看到内容页面下方有打赏功能 ,之前一直想加到上面去,今天终于实现了,从WP大学网站看到认为还不错的效果且没有用到插件,工作之余整理一下分享给大家 1.下载代码:点击打开链接 2.文件内 ...

  9. 【iOS】程序内跳转到支付宝转账(非SDK实现支付)及相关监听

    转载请注明出处 今天遇到了一个有意思的问题,就是支付调用支付宝,但是后台返的链接类似这种(https://qr.alipay.com/bax05299bjty5xvbkjii8018).这种链接直接打 ...

  10. 微信支付宝H5收款码扫码转账个人通道仿原生接口带备注可回调成功率9成以上

    微信支付宝收款码转账H5免签出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率         本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账收款接 ...

最新文章

  1. 今日宇宙最热科技:人工智能可预测死亡时间,马斯克拿下美空军1.3亿合同!...
  2. tomcat的work目录作用
  3. 骨骼捏脸功能的实现方法
  4. windows10风格 springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池...
  5. 历经7年双11实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
  6. 《人月神话》读后总结
  7. 深入理解es module
  8. HDU 3551 Hard Problem
  9. 堆排序(C语言实现)
  10. 2021 年中国城市发展规划数据源
  11. 天邑TY1608_S905L3B_支持RTL8822CS、MT7668_线刷/卡刷_刷机固件包
  12. Java中的增强for
  13. Activity的概述
  14. trainning-----1
  15. Semi-Supervised Semantic Segmentation with Cross-Consistency Training论文笔记
  16. 自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之二)
  17. 基于莱维飞行和随机游动策略的灰狼算法
  18. 敏俊物联MJIOT-AMB-03 RTL8710BN 高性能wifi模块
  19. 粘贴板管理 android,安卓剪贴板管理(Clipper Plus)
  20. bzoj1349 [Baltic2006]Squint

热门文章

  1. 暑假爆肝整理这篇python基础教程,全是干货,学完基础就过关(收藏加好评吧)
  2. html导航栏固定在顶部,将导航栏始终固定在窗口顶部:
  3. lbs mysql_使用mysql来实现lbs排序
  4. word标题序号变为黑色方块解决方案
  5. 激活函数:阶跃函数、sigmoid函数、ReLU函数、softmax函数
  6. 内置平头哥玄铁的WiFi和蓝牙芯片
  7. HTTP Live Streaming(HLS)详解
  8. 英语语法之后缀决定词性
  9. 全面掌握Java多线程
  10. N+1个数据恢复软件,全中文!全破解免费!(潘中医)_-Chaz-_新浪博客