Android 微信 支付宝支付,2行代码实现支付

作者简介

微信公众号(高质量文章推送):走向全栈工程师
作者:陈博易
声明:本文是个人原创,未经允许请勿转载
商业合作请在微信公众号回复:联系方式



前言


  1. 现在的多数App都离不开集成阿里支付宝支付和微信支付
  2. 准备写两篇关于阿里支付宝支付和微信支付的教程,让大家可以快速集成支付
  3. Android前端 Java后端 集成支付宝支付
  4. 微信支付是本篇的重点

环境以及工具


  1. Android项目:AndroidStudio3.0
  2. Java项目:IntelliJ IDEA 2017.2.3

整体步骤


  1. 微信支付申请流程
  2. Android端环境集成
  3. Android端代码展示
  4. Java后端代码展示

详细步骤


请参考微信支付开发文档
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

核心步骤解读


1. 微信支付申请流程

https://pay.weixin.qq.com/guide/inapp_payment.shtml

Android 微信 支付宝支付,2行代码实现支付_第1张图片

Android 微信 支付宝支付,2行代码实现支付_第2张图片

Android 微信 支付宝支付,2行代码实现支付_第3张图片

Android 微信 支付宝支付,2行代码实现支付_第4张图片

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。

2. Android端环境集成

将微信提供给我们的,wxapi的文件放到我们的主包下面(重要的事情说三次)

Android 微信 支付宝支付,2行代码实现支付_第5张图片

3. Android端代码展示
  1. 前端app支付回调核心代码

Android 微信 支付宝支付,2行代码实现支付_第6张图片

  1. 前端app支付核心代码

Android 微信 支付宝支付,2行代码实现支付_第7张图片

4. Java后端代码展示

微信商户的基本参数

Android 微信 支付宝支付,2行代码实现支付_第8张图片

这是java后端做的事情,大概看看就好,我们前端就发起支付就好

Android 微信 支付宝支付,2行代码实现支付_第9张图片

App支付成功以后,java后端会收到异步回调,也就是对数据库进行操作

Android 微信 支付宝支付,2行代码实现支付_第10张图片

/**
 * Create by: 陈博易
 * Date: 2017/12/1
 * time:  16:01
 * Email: [email protected]
 * 微信公众号:走向全栈工程师
 * 

* 微信支付 支付宝支付辅助类 */ public class PaymentHelper { private static final int SDK_PAY_FLAG = 1; /** * @param activity 调用的activity * @param weChatPayEntity 微信调用参数 */ public void startWeChatPay(Activity activity, WxChatPayEntity weChatPayEntity) { if (activity == null || weChatPayEntity == null) { return; } if (!WxPayConfig.APP_ID.equals(weChatPayEntity.getAppid())) { return; } IWXAPI wxapi = WXAPIFactory.createWXAPI(activity, WxPayConfig.APP_ID, true); // 将该app注册到微信 wxapi.registerApp(WxPayConfig.APP_ID); PayReq req = new PayReq(); req.appId = WxPayConfig.APP_ID; req.partnerId = weChatPayEntity.getPartnerid(); req.prepayId = weChatPayEntity.getPrepayid(); req.nonceStr = weChatPayEntity.getNoncestr(); req.timeStamp = weChatPayEntity.getTimeStamp(); req.packageValue = weChatPayEntity.getPackageValue();// "Sign=" + req.sign = weChatPayEntity.getSign(); wxapi.sendReq(req); } /** * @param activity 调用的activity * @param alipayEntity 支付宝参数 */ public void startAliPay(final Activity activity, final AlipayEntity alipayEntity) { if (activity == null || alipayEntity == null) { return; } Runnable payRunnable = new Runnable() { @Override public void run() { // 构造PayTask 对象 PayTask alipay = new PayTask(activity); // 调用支付接口,获取支付结果 String result = alipay.pay(alipayEntity.getPayInfo(), true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; // 必须异步调用 Thread payThread = new Thread(payRunnable); payThread.start(); } @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) msg.obj); /** * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/ * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665& * docType=1) 建议商户依赖异步通知 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档 if (TextUtils.equals(resultStatus, "9000")) { Toast.makeText(MyApplication.getContext(), "支付成功", Toast.LENGTH_SHORT).show(); } else { // 判断resultStatus 为非"9000"则代表可能支付失败 // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) if (TextUtils.equals(resultStatus, "8000")) { Toast.makeText(MyApplication.getContext(), "支付结果确认中", Toast.LENGTH_SHORT).show(); } else if (TextUtils.equals(resultStatus, "6001")) { Toast.makeText(MyApplication.getContext(), "用户取消支付", Toast.LENGTH_SHORT).show(); } else { // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误 Toast.makeText(MyApplication.getContext(), "支付失败", Toast.LENGTH_SHORT).show(); } } break; } default: break; } } }; }

总结


  1. 微信开放平台提供的demo,有一些坑已经帮大家清除了,导入进去就可以支付了,就是代码不优雅
  2. 个人封装的demo(微信支付和支付宝支付案例都集成在一起了,直接复制黏贴)
  3. 请大家多关注关注我。

  4. 导入小编项目的姿势要对!

Android 微信 支付宝支付,2行代码实现支付_第11张图片

个人相关教程

各种大佬推荐的编程视频资源分享
Android前端 Java后端 集成支付宝支付
postman使用 Android java后端 接口调试工具
Android抓包 Charles http接口调试
消息推送 Android java后端集成小米推送
如何导入简单的java项目-IntelliJ IDEA

请关注我(高质量文章推送)

源码地址———关注微信公众号,回复:微信支付宝支付


ndk开源教程地址(入门到放弃篇)


Android 微信 支付宝支付,2行代码实现支付_第12张图片

你可能感兴趣的:(安卓开发)