android 微信支付 简单实用
【摘要】
前言:
先去微信开放平台注册账号,然后创建应用,签名工具下载(在页面最下面)
创建成功得到appid。
注意这里会需要一些信息,比如包名和apk签名,签名要写线上的,即release的签名...
前言:
先去微信开放平台注册账号,然后创建应用,签名工具下载(在页面最下面)
创建成功得到appid。
注意这里会需要一些信息,比如包名和apk签名,签名要写线上的,即release的签名,后面会继续讲。
1,添加依赖、权限
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
(其中,前者包含统计功能)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
<uses-permission android:name="android.permission.INTERNET" />
<!-- for mta statistics, not necessary-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 1
- 2
- 3
- 4
- 5
- 6
权限基本上项目中都会用到,有就不用加了。
2,注册到微信
private IWXAPI api;
private void regToWx() {
api = WXAPIFactory.createWXAPI(mContext, GlobalConstant.APP_ID, true);
api.registerApp(GlobalConstant.APP_ID);
}
- 1
- 2
- 3
- 4
- 5
- 6
GlobalConstant.APP_ID 就是创建应用拿到的appid。
在合适的地方(比如onCreate中)调用regToWx()方法即可。
3,调起微信支付
private void doWXPay(OrderWX.DataBean data) {
PayReq request = new PayReq();
request.appId = data.appid;//应用ID
request.partnerId = data.partnerid;//商户号
request.prepayId = data.prepayid;//预支付交易会话ID
request.packageValue = data.packageX;//扩展字段 暂填写固定值Sign=WXPay
request.nonceStr = data.noncestr;//随机字符串
request.timeStamp = data.timestamp;//时间戳
request.sign = data.sign;//签名
api.sendReq(request);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
以上是关键代码,都有注释
4,处理回调
在项目包名下新建wxapi包,然后新建WXPayEntryActivity类
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wx_pay_entry);
IWXAPI api = WXAPIFactory.createWXAPI(this, GlobalConstant.APP_ID, false);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
LogUtil.i("onReq" + baseReq.getType());
}
@Override
public void onResp(BaseResp baseResp) {
switch (baseResp.getType()) {
case ConstantsAPI.COMMAND_PAY_BY_WX:
LogUtil.i("baseResp.errCode====" + baseResp.errCode);
switch (baseResp.errCode) {
case 0://展示成功页面
ToastUtil.showCenterToast("支付成功");
break;
case -1://签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
ToastUtil.showCenterToast("支付异常");
break;
case -2://无需处理。发生场景:用户不支付了,点击取消,返回APP。
ToastUtil.showCenterToast("支付取消");
break;
}
finish();
break;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
以上即核心代码,在onResp中处理回调逻辑即可。
别忘了在manifest中注册
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
- 1
- 2
- 3
- 4
闪屏要处理的话可以加上透明主题:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
WXEntryActivity 同理
最后,关于测试,因为前面是线上的,所以本地测试是非常不方便的,这里有个小技巧,我们只要本地环境使用线上签名就行了。
在app目录下的build.gradle文件中配置签名信息:
//配置keystore签名
signingConfigs {
release {
storeFile file("路径")
storePassword "密码"
keyAlias "别名"
keyPassword "密码"
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
.....
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/yechaoa/article/details/88668655
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)