本人用的
友盟进行的登录,可能和微信开放平台上的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,新浪微博登入的,我也有总结,大家可以做一个参考