热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何在AndroidApp中集成支付宝和微信支付功能

支付是各位Android开发者们在日常工作中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于如何在AndroidApp中集成支付宝和微信支付功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友下面随着小编来一起学习学习吧

前言

本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介绍吧。

集成支付宝支付

没想到现在 App 里集成支付宝是这么的简单,我还折腾了好久…


好了,开始,假设你已经完成了支付宝那些繁杂的申请啥的工作,进入开发了。

首先,去下载官方的 DEMO :

App支付客户端DEMO&SDK。

导入开发资源

解压后把里面的 jar 包拿出来放到你工程的 lib 目录下,如图

然后进入工程的“Project Structure”,在app module下选择“File dependency”,将libs目录下的alipaySDK-xxxxxxxx.jar导入,或者在app module下的build.gradle下手动添加依赖,如下代码所示:

......
compile files('libs/alipaySdk-20170725.jar')
......

修改 AndroidManifest 文件

复制进去就行



 

声明权限





好了,准备工作基本完成。

支付接口的调用

这里参考下给的 Demo。
由于支付包的 Demo 给的是本地加密的方式,并且不推荐使用这种方法,所以我们只需要用的其中的部分代码就好了。
首先,把 PayResult.java这个类复制到你的项目里。代码如下:

public class PayResult {
 private String resultStatus;
 private String result;
 private String memo;
 public PayResult(Map rawResult) {
  if (rawResult == null) {
   return;
  }
  for (String key : rawResult.keySet()) {
   if (TextUtils.equals(key, "resultStatus")) {
    resultStatus = rawResult.get(key);
   } else if (TextUtils.equals(key, "result")) {
    result = rawResult.get(key);
   } else if (TextUtils.equals(key, "memo")) {
    memo = rawResult.get(key);
   }
  }
 }
 @Override
 public String toString() {
  return "resultStatus={" + resultStatus + "};memo={" + memo
    + "};result={" + result + "}";
 }
 /**
  * @return the resultStatus
  */
 public String getResultStatus() {
  return resultStatus;
 }
 /**
  * @return the memo
  */
 public String getMemo() {
  return memo;
 }
 /**
  * @return the result
  */
 public String getResult() {
  return result;
 }
}

然后调支付接口。PayTask对象主要为商户提供订单支付、查询功能,及获取当前开发包版本号。获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),

private static final int SDK_PAY_FLAG = 1;
// 订单信息
final String orderInfo = info; 
Runnable payRunnable = new Runnable() {
@Override
 public void run() {
  PayTask alipay = new PayTask(PayDemoActivity.this);
  Map result = alipay.payV2(orderInfo, true);
  Message msg = new Message();
  msg.what = SDK_PAY_FLAG;
  msg.obj = result;
  mHandler.sendMessage(msg);
 }
};
Thread payThread = new Thread(payRunnable);
payThread.start();

注意下 orderInfo这个变量,这个值是由通过向后台请求返回的值。

这里需要后台注意的是,写的时候看好App支付请求参数说明这个文档。

然后是支付结果的获取与处理。

@SuppressLint("HandlerLeak")
 private Handler mHandler = new Handler() {
  @SuppressWarnings("unused")
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case SDK_PAY_FLAG: {
    @SuppressWarnings("unchecked")
    PayResult payResult = new PayResult((Map) msg.obj);
    /**
     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
     */
    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
    String resultStatus = payResult.getResultStatus();
    // 判断resultStatus 为9000则代表支付成功
    if (TextUtils.equals(resultStatus, "9000")) {
     // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
     Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
    } else {
     // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
     Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
    }
    break;
   }
   default:
    break;
   }
  };
 };

然后就好了。

结束。

集成微信支付

微信支付还是好弄的,就是先该注册的注册,该申请的申请,这个不是本文的重点。

因为微信有个支付回调的问题,我的做法就是在项目的x.x.x.wxapi包路径中实现 WXPayEntryActivity 类(切记包名或类名一定要一致,否则会造成无法回调)。代码如下:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
 private static final String TAG = "WXPayEntryActivity";
 private IWXAPI api;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.pay_result);
  
  api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
  api.handleIntent(getIntent(), this);
  /*
  * 在这里去做跟后台服务器的请求,
  * 获取需要的签名信息,然后调起微信支付。
  **/
 }
 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
  api.handleIntent(intent, this);
 }
 @Override
 public void onReq(BaseReq req) {
 }
 @Override
 public void onResp(BaseResp resp) {
  Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
  switch(resp.errCode){
   case 0:
   //支付成功,做自己想做的处理
   break;
   case -1:
   //可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
   break;
   case -2:
   //用户取消.无需处理。发生场景:用户不支付了,点击取消,返回APP。
   break;
   default:
   break
  }
 }
}

后记

这是第一次接入支付宝支付,一开始还很起劲的参照一个库去进行封装,然后发现好像多此一举,并且还不成功,和后台捯饬了好久然后看Demo才弄出来。

参考:

  • 支付宝支付文档
  • 微信支付APP端开发步骤

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
author-avatar
尤天asoka
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有