Android集成微信支付

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

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

 

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

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);

    }
}

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值