android studio调起微信支付、分享、登陆

        本章适用刚入门小白,手把手教你直调微信SDK。

1.接上文,上个文章。服务器我们已经搭建好了,现在我们接入微信功能

2.准备微信开放平台申请的APPID,用于注册实例化。

3.创建项目工程,工程包名和微信开放平台申请的应用包名必须一致,包名不一致调不起微信SDK功能

4.在android studio 导入微信SDK Gradle依赖   在build.gradle中导入

dependencies {
    api 'com.tencent.mm.opensdk:wechat-sdk-android:+'//    导入Wechat SDK依赖库
}

5.视图层XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="微信授权" />

    <Button
        android:id="@+id/btnShare"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="微信分享" />

    <Button
        android:id="@+id/btnPay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="微信支付" />
</LinearLayout>

6.创建业务层

/**
 * 微信业务层
 * @author liaozan8888@163.com
 */
public class WeChatService {

    //APPID
    public static final String APP_ID = "填写微信开放平台应用申请的APPID";

    // IWXAPI 是第三方app和微信通信的openapi接口
    private IWXAPI iwxapi;

    private static WeChatService instance;
    /**
     * 实例化
     */
    public static WeChatService GetInstance(){
        if(instance==null){
            instance = new WeChatService();
        }
        return instance;
    }
    /**
     * 初始化
     */
    private WeChatService() {
        // 通过WXAPIFactory工厂,获取IWXAPI的实例
        iwxapi = WXAPIFactory.createWXAPI(MainActivity.Instance, APP_ID, false);
        iwxapi.registerApp(APP_ID);// 将该app注册到微信
    }

    /**
     * 微信登陆
     */
    public void openWeChatLogin(){
        SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";
        req.state = "wechat_sdk";
        //调起微信接口
        iwxapi.sendReq(req);
    }
    /**
     * 调起微信支付
     * @param appId
     * @param partnerId
     * @param prepayId
     * @param nonceStr
     * @param timeStamp
     * @param sign
     */
    public void openWeChatPay(String appId,String partnerId,String prepayId,String nonceStr,String timeStamp,String sign){
        //支付请求类
        PayReq request = new PayReq();
        request.appId = appId;
        request.partnerId =partnerId;
        request.prepayId= prepayId;
        request.packageValue = "Sign=WXPay";
        request.nonceStr= nonceStr;
        request.timeStamp= timeStamp;
        request.sign=sign;
        //调起微信支付
        iwxapi.sendReq(request);
    }

    /**
     * 调起微信分享 (h5链接分享)
     * @param title
     * @param description
     * @param scene 分享场景 Session微信好友  Timeline朋友圈
     */
    public  void openWeChatShare(String title,String description,String scene){
        //初始化一个WXWebpageObject,填写url
        WXWebpageObject webpage = new WXWebpageObject();
        webpage.webpageUrl ="http://cms.iclickdesign.com/shareWx.html";
        //用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象
        WXMediaMessage msg = new WXMediaMessage(webpage);
        msg.title = title;
        msg.description = description;
        //链接压缩图
        //Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
        //msg.thumbData =Util.bmpToByteArray(thumbBmp, true);
        //构造一个Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.message =msg;
        //分享场景
        if(scene.equals("Session")){
            req.scene = SendMessageToWX.Req.WXSceneSession ;
        }else if(scene.equals("Timeline")){
            req.scene = SendMessageToWX.Req.WXSceneTimeline ;
        }
        //调用 api 接口,发送数据到微信
        iwxapi.sendReq(req);
    }
}

7.微信分享、微信授权回调监听,在工程下创建wxapi.WXEntryActivity类  继承Activity类  实现IWXAPIEventHandler接口

/**
 * 微信分享登陆回调监听
 * @author liaozan8888@163.com
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    //实例化业务层
    private WeChatService wechatService = WeChatService.GetInstance();

    // IWXAPI 是第三方app和微信通信的openapi接口
    private IWXAPI iwxapi;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //实例化
        iwxapi = WXAPIFactory.createWXAPI(this, WeChatService.APP_ID);
        iwxapi.handleIntent(getIntent(), this);
    }

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

        }
    }
    //第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    @Override
    public void onResp(BaseResp baseResp) {
        switch (baseResp.getType()){
            case ConstantsAPI.COMMAND_SENDAUTH: //授权回调
                break;
            case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX://分享回调
                break;
        }
        finish();
    }
}

8.微信支付回调监听  在工程中创建wxapi.WXPayEntryActicity类 继承Activity类  实现IWXAPIEventHandler接口

/**
 * 微信回调监听
 * @author liaozan8888@163.com
 */
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    //实例化业务层
    private WeChatService wechatService = WeChatService.GetInstance();

    // IWXAPI 是第三方app和微信通信的openapi接口
    private IWXAPI iwxapi;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        iwxapi = WXAPIFactory.createWXAPI(this, WeChatService.APP_ID);
        iwxapi.handleIntent(getIntent(), this);
    }

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

        }
    }
    //第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    @Override
    public void onResp(BaseResp baseResp) {
        switch (baseResp.getType()){
            case ConstantsAPI.COMMAND_PAY_BY_WX: //支付回调
                break;
        }
        finish();
    }
}

9.在AndroidManifest.xml中注册微信回调Activity、权限配置、引用查询库

    <!--    权限配置-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <!--引用查询包下类-->
    <queries>
        <package android:name="com.tencent.mm" />
    </queries>
    
    
    <!-- 在application标签下编写activity -->
    <!--注册回调Activity-->
    <activity
        android:name=".wxapi.WXEntryActivity"
        android:exported="true"
        android:launchMode="singleTop"/>
    <activity
        android:name=".wxapi.WXPayEntryActivity"
        android:exported="true"
        android:launchMode="singleTop"/>

10.启动类

public class MainActivity extends AppCompatActivity {

    public static MainActivity Instance;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Instance = this;
        //微信授权事件
        findViewById(R.id.btnLogin).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WeChatService.GetInstance().openWeChatLogin();
            }
        });
        //微信分享事件
        findViewById(R.id.btnShare).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WeChatService.GetInstance().openWeChatShare("测试","测试","Session");
            }
        });
        //微信支付事件
        findViewById(R.id.btnPay).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WeChatService.GetInstance().openWeChatPay("xxx","xxx"
                ,"xxx"
                ,"xxx"
                ,"xxx"
                ,"xxx");
            }
        });
    }
}

11.工程包类结构

GitHub仓库链接:https://github.com/Lz-Yonnw/WeChat_App.git

发送到微信的请求处理响应结构  会回调到该方法(onResp),具体回调处理逻辑请根据当前业务场景实现。

完结  望对你有所帮助!下期出iOS接入微信支付

 

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Android 微信支付 SDK 的对调打印主要是指在开发过程中,使用 SDK 提供的接口进行支付功能的调试和输出日志信息。 对调打印的目的是为了方便开发人员在开发过程中进行调试和定位问题。在使用微信支付 SDK 进行支付功能开发时,可以通过在关键代码位置添加打印语句,用于输出相关的调试信息,以便于分析和调试。 在对调打印中,可以根据需要打印的信息进行选择,如订单号、支付结果、微信支付 SDK 的版本等。一般来说,在支付请求发送之前和支付结果回调之后的关键阶段打印信息较多,可以通过打印语句输出相关的请求参数和回调结果,以便于了解支付流程和排查可能出现的问题。 在使用 Android 微信支付 SDK 进行对调打印时,需要注意以下几点: 1. 确保在正确的位置插入打印语句,一般在关键代码处添加,如支付请求发送前、支付结果回调等。 2. 打印的信息要具有可读性,可以输出关键参数的值、状态信息等,便于分析和定位问题。 3. 在实际发布应用之前,需要及时去除对调打印相关的代码,以避免信息泄露和代码冗余。 总之,通过对调打印的使用,开发人员能够更方便地进行支付功能的开发和调试,及时排查问题并优化代码,提高应用的支付体验。 ### 回答2: Android微信支付SDK是一种用于在Android应用程序中集成微信支付功能的开发工具包。在进行对调打印时,主要有以下几个步骤: 首先,你需要确认你的开发环境已经配置好,包括Android Studio和相关的开发工具包。接下来,在微信开放平台注册一个开发者账号,并创建一个应用,获得相应的AppID和AppSecret。 然后,你需要下载并导入微信支付SDK到你的Android项目中。可以通过在项目的build.gradle文件中添加相关依赖来导入SDK。然后,在你的项目中创建一个用于处理支付结果的回调类。 接着,你需要在你的应用中添加调起微信支付的代码。首先,你需要获取一个用于支付的预支付订单号,并根据微信支付要求对订单进行签名处理。然后,你可以使用WXAPIFactory工厂类的createWXAPI方法创建一个WXAPI对象,并将AppID注册到该对象上。 最后,在调起支付的时候,你需要构建一个PayReq对象,并将必要的支付参数设置到该对象中。然后,调用WXAPI的sendReq方法,将PayReq对象发送给微信客户端进行支付。支付结果将通过之前注册的回调类返回给你的应用。 总结起来,对调打印的过程包括了注册微信开放平台账号,导入微信支付SDK,实现支付结果回调,创建并注册WXAPI对象,构建并发送PayReq对象。通过以上步骤,你的Android应用就可以使用微信支付功能了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不秃头不是好技术员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值