Android集成微信支付

官方api:Android接入指南 | 微信开放文档

打开微信开放平台登录账户后点击创建应用

 

根据提示填写完相应的内容提交审核通过后,需要开通支付权限。

1.接着在你的项目工程build.gradle文件中添加微信支付依赖库
​api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
2.在你的包的根目录下,创建wxapi这个package包,注意必须是wxapi
3.在wxapi这个包下面再创建一个WXPayEntryActivity类,创建完成后记得在清单文件中注册

<activityandroid:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop">
</activity>

4.如果你的targetSdkVersion是30以上的话,需要在主工程的AndroidManifest.xml 中增加标签,如果不配置的话可能无法正常拉起微信支付

<queries><package android:name="com.tencent.mm" />
</queries>

5.WXPayEntryActivity相关代码实现

package com.ranlegeran.wechatpaydemo.wxapi;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;import java.util.List;public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {private static final String TAG = "WXPayEntryActivity";private IWXAPI mIWXAPI;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mIWXAPI = WXAPIFactory.createWXAPI(this, "你申请的APPID");mIWXAPI.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);mIWXAPI.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq baseReq) {switch (baseReq.getType()){}}//第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic void onResp(BaseResp baseResp) {Log.e(TAG, "onResp---> " + baseResp.errCode);if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {if (baseResp.errCode == 0) {//支付成功相关操作Log.e(TAG, "onResp---> 支付成功" + baseResp.errCode);} else if (baseResp.errCode == -1) {//支付失败相关操作Log.e(TAG,"onResp---> 支付失败" + baseResp.errCode);} else if (baseResp.errCode == -2) {//支付取消相关操作Log.e(TAG,"onResp---> 用户取消" + baseResp.errCode);}finish();}}/*** 判断 用户是否安装微信客户端*/public static boolean isWxAvilible(Context context) {final PackageManager packageManager = context.getPackageManager();List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equals("com.tencent.mm")) {return true;}}}return false;}
}

5.在MainActivity中去调用微信支付,在onCreate方法中把AppId注册到微信,布局中放置了一个Button按钮用来点击调用
toWeChatPay()方法,这个方法中是模拟请求解析后端返回的数据,请根据自己后端返回的实际数据去处理

package com.ranlegeran.wechatpaydemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.Button;import com.ranlegeran.wechatpaydemo.wxapi.WXPayEntryActivity;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;public class MainActivity extends AppCompatActivity {private Button mBtnWeChatPay;//IWXAPI 是第三方app和微信通信的openApi接口private IWXAPI mIWXAPI;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过WXAPIFactory工厂,获取IWXAPI的实例mIWXAPI = WXAPIFactory.createWXAPI(this,"你申请的APPID",true);//将应用的appId注册到微信mIWXAPI.registerApp("你申请的APPID");mBtnWeChatPay = this.findViewById(R.id.call_wechat_pay);mBtnWeChatPay.setOnClickListener(v -> {toWeChatPay();});}/*** 这里模拟调用后端接口解析返回的数据* 只是模拟,请根据后台返回的实际情况解析*/private void toWeChatPay() {Retrofit mRetrofit = RetrofitManager.getInstance().getRetrofit();Api mApi = mRetrofit.create(Api.class);Call<ResponseBody> mCall = mApi.postWeChatPay(mModeltype,payType,mMethod,orderId,mOpenappid);mCall.enqueue(new Callback<ResponseBody>() {@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {ResponseBody mBody = response.body();try {JSONObject rootObject = new JSONObject(mBody.string());int code = rootObject.optInt("code");String msg = rootObject.optString("msg");String data = rootObject.optString("data");if (code != 1) {toast(msg);return;} else {JSONObject dataObject = new JSONObject(data);String appid = dataObject.getString("appid");String partnerid = dataObject.getString("partnerid");String prepayid = dataObject.getString("prepayid");String timestamp = dataObject.getString("timestamp");String noncestr = dataObject.getString("noncestr");String spackage = dataObject.getString("package");String sign = dataObject.getString("sign");//判断手机是否安装了微信客户端if (!WXPayEntryActivity.isWxAvilible(MainActivity.this)) {toast("您还没有安装微信客户端");return;}transferWxPay(appid,partnerid,prepayid,timestamp,noncestr,spackage,sign);}} catch (JSONException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {toast("微信支付" + t.getMessage());}});}private void transferWxPay(String appid, String partnerid, String prepayid,String timestamp, String noncestr, String spackage,String sign) {PayReq mPayReq = new PayReq();//AppIdmPayReq.appId = appid;//微信支付分配的商户号mPayReq.partnerId = partnerid;//微信返回的支付交易会话IDmPayReq.prepayId = prepayid;//暂填写固定值Sign=WXPaymPayReq.packageValue = "Sign=WXPay";//随机字符串,不长于32位。推荐随机数生成算法mPayReq.nonceStr = noncestr;//时间戳mPayReq.timeStamp = timestamp;//签名mPayReq.sign = sign;mIWXAPI.sendReq(mPayReq);}
}

 最后附一张拉起微信支付的截图

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

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

相关文章

python代码使用过程中使用快捷键注释时报错

1.代码 2.代码报错 3.代码注释后的结果 4. 原因

sql注入方式之联合注入

1.1 靶场环境 系统centos7 IP地址192.168.1.24 1.2 联合注入原理 联合查询注入是联合两个表进行注入攻击&#xff0c;使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同&#xff0c;不然会出现报错。 1.3 找注入点 找注入点&#xff0c;当输入id1 an…

C语言——文件管理

文件&#xff1a;即磁盘上的文件&#xff0c;使用文件可以将数据直接存放在电脑的硬盘上&#xff0c;做到数据持久化。 在程序设计中&#xff0c;按文件的功能划分&#xff0c;将文件分为程序文件与数据文件 程序文件 程序文件包括源文件&#xff08;.c&#xff09;&#xff0…

Centos7搭建 Skywalking 单机版

介绍 Skywalking是应用性能监控平台&#xff0c;可用于分布式系统&#xff0c;支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 整体架构如图 Agent &#xff1a;在应用中&#xff0c;收集 Trace、Log、Metrics 等监控数据&#xff0c;使用 RPC、RESTful API、Kafk…

【算法详解】二分查找

1. 二分查找算法介绍 「二分查找算法&#xff08;Binary Search Algorithm&#xff09;」&#xff1a;也叫做 「折半查找算法」、「对数查找算法」。是一种在有序数组中查找某一特定元素的搜索算法。 基本算法思想&#xff1a;先确定待查找元素所在的区间范围&#xff0c;在逐步…

骨传导耳机哪个品牌质量比较好?精选六大必看的耳机选购指南

骨传导耳机&#xff0c;是作为近年来深受消费者喜欢的蓝牙耳机产品&#xff0c;目前已经成为了热度最高的骨蓝牙耳机。然而&#xff0c;随着骨传导耳机的热度增高&#xff0c;市场上开始出现一些质量参差不齐、音质不佳的劣质产品&#xff0c;如果使用这些劣质产品的话&#xf…

C语言从入门到实战————文件操作

目录 前言 1. 为什么使用文件&#xff1f; 2. 什么是文件&#xff1f; 2.1 程序文件 2.2 数据文件 2.3 文件名 3. ⼆进制文件和文本文件&#xff1f; 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 5. 文…

基于java+springboot+vue实现的旅游管理系统(文末源码+Lw)23-234

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大&#xff0c;容错率低&#…

使用yolov8实现自动车牌识别(教程+代码)

该项目利用了一个被标记为“YOLOv8”的目标检测模型&#xff0c;专门针对车牌识别任务进行训练和优化。整个系统通常分为以下几个核心步骤&#xff1a; 数据准备&#xff1a; 收集包含车牌的大量图片&#xff0c;并精确地标记车牌的位置和文本信息。数据集可能包含各种环境下的…

短剧小程序开发:解锁碎片时间的观影新风尚

随着移动互联网的飞速发展&#xff0c;人们对内容的消费方式也在不断升级。短剧作为一种新型的内容形态&#xff0c;正逐渐受到广大用户的青睐。为了满足用户随时随地观看短剧的需求&#xff0c;我们推出了全新的短剧小程序开发服务&#xff0c;为您解锁碎片时间的观影新风尚。…

C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间&#xff0c;使用完毕会立即释放&#xff0c;静态局部变量使用static修饰符定义&#xff0c;即使在声明时未赋初值&#xff0c;编译器也会把它初始化为0&#xff0c;并且静态局部变量存储于进程的全局数据区&#xff0c;即使函数返回&#xff0…

解密项目管理专业术语:十大名词背后的实战技巧

项目管理是一门综合学科&#xff0c;涵盖了一系列方法、技能和工具。今天为大家带来项目管理的十大专业术语&#xff0c;它们分别是项目范围、利益相关者管理、工作分解结构&#xff08;WBS&#xff09;、里程碑、风险管理、资源分配、关键路径法&#xff08;CPM&#xff09;、…

双向链表介绍

目录 1. 双向链表的结构 2. 双向链表的实现 初始化哨兵位&#xff1a; 打印链表&#xff1a; 尾插&#xff1a; 头插&#xff1a; 尾删&#xff1a; 头删&#xff1a; 查找&#xff1a; 在指定位置之后插入数据&#xff1a; 删除目标位置的数据&#xff1a; 销毁链…

CAXA电子图版2020版 下载地址及安装教程

CAXA电子图板是一款由国内软件公司CAXA开发的专业CAD&#xff08;计算机辅助设计&#xff09;软件。它主要用于绘制和编辑各种类型的二维图纸和工程图纸&#xff0c;广泛应用于建筑、机械、电气和电子等行业。 CAXA电子图板具有以下主要功能和特点&#xff1a; 二维绘图&…

什么是自动化测试?深入了解其作用!

本文介绍了自动化测试的概念&#xff0c;以及为什么重要。自动化测试可以帮助你节省时间和金钱&#xff0c;并提高你的软件质量 自动化测试是指利用工具模拟人为操作&#xff0c;自动执行测试用例&#xff0c;并生成测试结果的过程。它是一种高效、准确、一致的测试方法&#…

C++手撕红黑树

文章目录 红黑树概念性质&#xff08;条件限制&#xff09;节点的定义红黑树的结构红黑树的插入cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在且为红cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u不存在或u为黑&#xff0c;插入到p对应的一边cur为红…

02 _ 分布式系统的指标:啥是分布式的三围

你好&#xff0c;我是聂鹏程。 在上一篇文章中&#xff0c;通过对分布式发展历程的学习&#xff0c;我们对分布式技术有了一个整体印象。接下来&#xff0c;我们就再来看看可以用哪些指标去具体地衡量一个分布式系统。如果你已经对分布式系统的指标了解得很清楚了&#xff0c;…

群晖NAS使用Docker部署Potopea在线图片编辑工具并实现公网访问

文章目录 1. 部署Photopea2. 运行Photopea3. 群晖安装Cpolar4. 配置公网地址5. 公网访问测试6. 固定公网地址 本文主要介绍如何在群晖NAS使用Docker部署Potopea在线图片编辑工具&#xff0c;并结合cpolar内网穿透实现公网环境可以远程访问本地部署的Potopea. Photopea是一款强大…

第十五届蓝桥杯测试组模拟赛两期

文章目录 功能测试一期-场景法-登录功能一期-等价类-边界值-添加用户账号输入框一期-登录-缺陷报告一期- UI自动化测试一期-单元测试-路径覆盖二期-正交法-搜索条件组合二期-测试用例二期-缺陷报告二期-自动化测试二期-单元测试-基本路径覆盖 功能测试 一期-场景法-登录功能 …

【云呐】工单管理流程,工单管理怎么处理

工单创建  客户或内部员工在系统中创建工单。工单应包括以下信息&#xff1a;  问题的描述  工单的优先级和紧急程度  相关的客户或内部员工信息  工单的类型或类别  相关的附件或文件 工单分配  工单需要分配给适当的人员或团队来解决。分配过程可能涉及到以下步…