Android集成微信支付

news2025/2/24 17:17:47


打开微信开放平台登录账户后点击创建应用
在这里插入图片描述
根据提示填写完相应的内容提交审核通过后,需要开通支付权限。

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

<activity
     android: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;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mIWXAPI = WXAPIFactory.createWXAPI(this, "你申请的APPID");
        mIWXAPI.handleIntent(getIntent(), this);

    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mIWXAPI.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {
        switch (baseReq.getType()){

        }
    }

    //第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    @Override
    public 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;


    @Override
    protected 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>() {
            @Override
            public 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);
                }
            }

            @Override
            public 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();
        //AppId
        mPayReq.appId = appid;
        //微信支付分配的商户号
        mPayReq.partnerId = partnerid;
        //微信返回的支付交易会话ID
        mPayReq.prepayId = prepayid;
        //暂填写固定值Sign=WXPay
        mPayReq.packageValue = "Sign=WXPay";
        //随机字符串,不长于32位。推荐随机数生成算法
        mPayReq.nonceStr = noncestr;
        //时间戳
        mPayReq.timeStamp = timestamp;
        //签名
        mPayReq.sign = sign;

        mIWXAPI.sendReq(mPayReq);

    }
}

最后附一张拉起微信支付的截图
在这里插入图片描述

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

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

相关文章

Nodejs+vue体育用品商城商品购物推荐系统_t81xg

本课题基于协同过滤算法&#xff0c;主要采用nodejs技术和MySQL数据库技术以及vue框架进行开发。功能主要包括首页、个人中心、用户管理、商品分类管理、商品信息管理、交流论坛、留言板、系统管理、订单管理等功能&#xff0c;从而实现个性化智能体育商品推荐方式&#xff0c;…

MyBatis基础之动态SQL

文章目录 动态 SQLif 元素choose-when-otherwise 元素where 元素set 元素foreach 元素 动态 SQL 简而言之&#xff0c;动态 SQL 就是在 Mapper 中使用分支、循环等逻辑。常见的动态 SQL 元素包括&#xff1a; if 元素choose-when-otherwise 元素where 元素set 元素foreach 元…

2024年中国计量大学MBA最新招生计划公布:有哪些看点?

中国计量大学MBA项目立项于2023年&#xff0c;第一年招生就顺利完成开班任务&#xff0c;虽然人数不多&#xff0c;但是因为其有自身的项目培养定位&#xff0c;因此未来的市场中还是可以保持自身的优势。从2024年最新的招生计划来看&#xff0c;中国计量大学的总体计划依然采取…

大数据-离线项目

第一章 需求分析 需求分析与设计 项目需求背景 "某APP上线后 经营得当 使用户 日活量增多 出现以下问题""营销分析断层&#xff1a;"市场营销成本居高不下&#xff0c;投放拉新的效果追踪出现断层&#xff0c;无法追踪各渠道实际转化率&#xff0c;难以…

应用在摄像头对焦镜头中的马达驱动芯片

摄像头&#xff08;CAMERA或WEBCAM&#xff09;又称为电脑相机、电脑眼、电子眼等&#xff0c;是一种视频输入设备&#xff0c;被广泛的运用于视频会议、远程医疗及实时监控等方面。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通。另外&#xff0c;人们还…

记录uniapp 微信小程序胶囊分享bug处理 (第一次点击分享的时候不能修改标题或者路径)

问题复现情况: 以下为博主代码&#xff1a; 问题原因: 因为博主的业务需求&#xff0c;需要在分享的时候调用后端的接口来实现分享挂载推广关系。也就是因为调用了接口导致 重新给分享赋值标题或者路径的时候赋值不上。&#xff08;刚开始怀疑是微信分享的问题&#xff0c;后面…

HarmonyOS创作激励计划启动:助力技术创作突破边界

即日起推出HarmonyOS创作激励计划&#xff0c;成功投稿并入选的文章将在HarmonyOS开发者公众号上线&#xff0c;9大技术社区同步宣发&#xff0c;不仅有丰厚稿酬&#xff0c;还有机会赢取创作奖品&#xff01; 活动时间 即日起-2024年12月31日&#xff0c;每季度按照活动规则评…

RabbitMQ 几种模式

一、Hello World 模式 在这一部分中&#xff0c;我们将用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。模型如下所示&#xff1a; 在下图中&#xff0c;“ P” 是我们的生产者&#xff0c;“ C” 是我们的消费者。中间的框是一个队列 RabbitMQ 代表…

灞桥论“健” 共话康养 灞桥康养论坛取得圆满成功

随着我国“老龄化”的加速&#xff0c;养老资源的匮乏已经成为一个十分严峻的社会问题。同时随着生活水平的大幅提高&#xff0c;康养产业应势而生。涵盖了养老、医疗、体育、养生、旅游等多个领域的康养产业&#xff0c;不仅要为老人们实现“老有所乐、身体健康”的理想&#…

【数据结构】二叉树的前序遍历(七)

题目&#xff1a;二叉树的前序遍历 题目详情&#xff1a;给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历&#xff1b; 我们先来看几个示例&#xff1a; 输入&#xff1a;root [ 1&#xff0c;null&#xff0c;2&#xff0c;3 ] 输出&#xff1a;[ 1&#xf…

【送书】从不了解用户画像,到用画像数据赋能业务看这一本书就够了丨《用户画像:平台构建与业务实践》

文章目录 内容了解本书目录参与方式 &#x1f308;hello&#xff01; 各位铁汁们大家好啊&#xff0c;今天给大家推荐的的是机械工业出版社的 《用户画像&#xff1a;平台构建与业务实践》这本书&#xff01;   ⛳️大数据时代&#xff0c;如何有效地挖掘数据价值并通过画像数…

jvm-sandbox-repeater时间mock插件设计与实现

一、背景 jvm-sandbox-repeater实现了基础的录制回放流程编排&#xff0c;并简单的给了几个插件的demo&#xff0c;离实际项目运用其实还需要二次开发很多东西&#xff0c;其中时间mock能力是一个非常基础的能力&#xff0c;业务代码里经常需要用到这块&#xff1b; 二、调研 …

win10安装kafka,监听9092端口,java调用

1、从Kafka的官网下载Kafka安装包&#xff1a;Apache Kafka 我下的是2.8.0 对应pom.xml配置 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version> </dependency&…

linux安装配置zeppein

zeppelin是一个让交互式数据分析变得可行的基于网页的开源框架&#xff0c;具有数据分析、数据可视化等功能 一 解压安装包 这里提供了网盘资源 链接: https://pan.baidu.com/s/16pIoHL6ApGAs063cTOUYUg?pwdffq6 提取码: ffq6 下面的是 zeppein 安装包以及&#xff0c;上面的…

【爬虫实战】用python爬今日头条热榜TOP50榜单!

文章目录 一、爬取目标二、爬取结果三、代码讲解四、技术总结五、演示视频六、附完整源码 一、爬取目标 您好&#xff01;我是马哥python说&#xff0c;一名10年程序猿。 今天分享一期爬虫案例&#xff0c;爬取的目标是&#xff1a;今日头条热榜的榜单数据。 打开今日头条首…

月木学途开发 1.后台用户模块

概述 权限控制采用springsecurity 数据库设计 用户表 DROP TABLE IF EXISTS admin; CREATE TABLE admin (aid int(32) NOT NULL AUTO_INCREMENT,email varchar(50) DEFAULT NULL,username varchar(50) DEFAULT NULL,password varchar(255) DEFAULT NULL,phoneNum varchar(2…

日主题RiPro主题高端美化/设计素材软件下载站专用子主题/美化包源码(升级版/免拓展)

主题简介 日主题RiPro主题高端美化/设计素材软件下载站专用子主题/美化包源码&#xff0c;这个子主题美化包无授权无暗链&#xff0c;不用再修改原主题代码&#xff0c;在用这个本美化包前要先下载最新ripro主题&#xff0c;本子主题有版本要求&#xff0c;仅支持RiPro8.0以上…

Api接口加密策略

接口安全要求&#xff1a; 1.防伪装攻击&#xff08;案例&#xff1a;在公共网络环境中&#xff0c;第三方 有意或恶意 的调用我们的接口&#xff09; 2.防篡改攻击&#xff08;案例&#xff1a;在公共网络环境中&#xff0c;请求头/查询字符串/内容 在传输过程被修改&#x…

什么是网络安全?网络安全包括哪几个方面?

提及网络安全&#xff0c;很多人都是既熟悉又陌生&#xff0c;所谓的熟悉就是知道网络安全可以保障网络服务不中断。那么到底什么是网络安全?网络安全包括哪几个方面?通过下文为大家介绍一下。 什么是网络安全? 网络安全是指网络系统的硬件、软件及系统中的数据受到保护&a…

无人直播设置必看:手机自动直播有哪些好处?

随着科技的不断发展&#xff0c;手机直播已经成为了人们生活中不可或缺的一部分。手机自动直播作为一种新兴的技术&#xff0c;为我们的生活带来了诸多便利。本文将从以下几个方面阐述手机自动直播的好处。 首先&#xff0c;手机自动直播可以节省时间和精力。传统的直播方式需…