微信支付功能(超简单,五分钟实现微信支付)

本人用的友盟进行的登录,可能和微信开放平台上的jar包有冲突,所以微信开放平台的jar包没有导入,这个可以根据自身情况决定。之后还会补充一篇博客给大家提供友盟微信,QQ,微博登录的功能实现,废话不多说,直接进入主题,下面我们来集成微信支付功能。

在做之前先声明一下,我们这里所有的加密工作,都是后台进行的,直接给我传的值,大家根据自己的需求使用

开发中遇到的问题:一直支付错误,返回值为-1,检查之后所有的值都没有问题,最后原因竟然是因为没有打包测试,打包测试后立马成功了,在打包过程中,如果打包失败,在 defaultConfig 中添加 multiDexEnabled true  如这样:

defaultConfig {
        applicationId "com.bjmocang.kesport"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"


        multiDexEnabled true


        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }

1、在Manifest中添加权限,权限可能提供的不全,这个缺什么权限,大家可以自行添加

    <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.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

2、配置我们的 WXPayEntryActivity ,该类必须放在包名.wxapi 下,比如com.weixin.test.wxapi.WXPayEntryActivity ,包名或类名不一致会造成无法回调,切记配置清单文件,(不必配置其他信息,有些配置<intent-filter>这个是非必需的加不加都没影响,我的建议是不用添加),exported=true这个必须配置,不配置回调会出问题,

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

3、WXPayEntryActivity 类中的内容

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

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;

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.pay_result);

        api = WXAPIFactory.createWXAPI(this, "wx*******"); //加入自己在微信开放平台上的AppId就可以
        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) {
        Log.d("WXPayEntryActivity", req.openId);
    }

    @Override
    public void onResp(BaseResp resp) {
        Log.d("WXPayEntryActivity", resp.errCode + resp.errStr);
        //支付后信息提示
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

            int code = resp.errCode;
            if (code == 0) {
                //支付成功后的逻辑处理

            } else if (code == -2) {
                //用户取消
                Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
            } else if (code == -1) {
                //错误
                Toast.makeText(WXPayEntryActivity.this, "支付错误", Toast.LENGTH_SHORT).show();
            }
            finish();

        }
    }

}

4、微信官方的sdk是以依赖的形式添加进去的

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

5、接下来就是实现支付的代码:超级简单,在支付按钮的点击事件中调用这个方法就可以

APPID 在 微信支付平台中有,partnerId,prepayId后台传过来的,packageValue固定的值,nonceStr,timeStamp,sign都是后台传过来的,

private void toWXPay() {
        IWXAPI api = WXAPIFactory.createWXAPI(this, "wx*******", false);//填写自己的APPID
        api.registerApp("wx*******");//填写自己的APPID,注册本身APP

        PayReq req = new PayReq();//PayReq就是订单信息对象
        //给req对象赋值
        req.appId = "**********";//APPID
        req.partnerId = "********";//    商户号
        req.prepayId = "**********";//  预付款ID
        req.packageValue = "Sign=WXPay";//固定值Sign=WXPay
        req.nonceStr = "*******";//随机数
        req.timeStamp = "********";//时间戳
        req.sign = "**********";//签名

        api.sendReq(req);//将订单信息对象发送给微信服务器,即发送支付请求
    }

5、就这样就吊起了微信支付页面,记得微信支付一定要打包项目之后才可以调起支付页面,我就是因为这个问题被困扰两天,希望大家在5分钟就可以将微信支付写出来

6、最后,附上一张效果图,有需要友盟微信,QQ,新浪微博登入的,我也有总结,大家可以做一个参考

we

猜你喜欢

转载自blog.csdn.net/jing_80/article/details/83791594