教你在6分钟内妥妥集成微信以及支付宝支付
前言 (浪费一分钟)
今天,不讲这个,也不讲那个,那么讲点啥呢?
嘿嘿嘿,讲讲如何在5分钟之内,快速,成功,集成微信以及支付宝支付吧~~~
查看效果
有图不上,非君子~~
支付思路
微信支付,支付宝支付,其实思路都是一样的,很简单,却很重要,如下:
首先大家需要注意的一点是,APP端不能留有任何关于支付宝以及微信对应的key的关键配置,而需要将这些内容放置在后台进行配置管理,原因是App容易受到反编译以及破解的风险,所以放置在服务器端进行配置管理相对来说比较安全,但这只是相对而言!。
App端点击支付,调用服务端提供支付接口,传入当前项目所需金额以及数量等内容;
服务端接收到App传入的支付信息,通过加签加密等等将当前接收内容发送微信或者支付宝服务器,接收返回结果;
App端接收到的服务端信息,通过官方文档提供如何调起对应客户端进行对应的参数配置;
用户输入完密码,代表订单完成,对应的我们的服务端以及App端都会接收到回调结果,从而代表一切OK~
微信支付(预计4分钟即可)
首先,关注一波官方文档:
1. 微信支付 Android 接入指南;
2. 微信支付API;
3. demo下载地址;
4. 资源下载地址;
啧啧,浪费了一分钟~
为什么LZ说浪费呢?
这里不得不吐槽一波:
没做微信支付前,感觉BAT公司肯定和其他的不一样,至少接入的文档会让人感觉不知不觉,WC,好了~~~
结果,惨的一B,说多都是泪!!!(再次希望官方能够认认真真完善下文档~~~浪费了0.5分钟!!!)
本文省去微信支付前期操作,例如申请账号,配置签名,通过审核等等,这些就不说了。具体原因:
LZ所在公司,这些都是属于保密,当然也可以理解为LZ没有权限操作这些事儿,虽然知道相对应的步骤,但是本着最基本的原则,这里还是不说了,希望以后可以真正接触下,虽说简单,但是还是要亲历亲为下较好`
还有一分钟,我们一起来看,如何快速集成。
添加远程依赖
之前方式,各位可以下载相关SDK,But,现在我们可以直接使用远程依赖库方式直接引用,如下:
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’
改造Build文件,新增签名配置
关于以下内容,有兴趣的可以查看LZ之前学习从而总结的博文:
Android 技巧之如何一个key玩转第三方服务(微信支付、某某地图)正式以及测试所需不同的key
下面简单附上当前LZ所使用的配置:
// 签名配置
signingConfigs {
release {
try {
storeFile file("./keystore/正式证书.jks")
storePassword "storePassword"
keyAlias "keyAlias"
keyPassword "keyPassword"
} catch (ex) {
throw new InvalidUserDataException(ex.toString())
}
}
debug {
storeFile file("./keystore/测试-debug.jks")
}
}
有的小伙伴说了,我可以不配置吗?
LZ说,当然可以,只要你不嫌测试麻烦~啦啦啦~
添加必要权限
权限,这个肯定是必须的啦~
创建微信指定文件
在项目根目录下创建如下文件:
重点:
必须在项目目录下创建wxapi,以及此目录下的WXPayEntryActivity文件!!!
Do not ask me why?
微信就这么屌!!!
而这个WXPayEntryActivity主要做的事儿,便是接收调起微信之后的结果,关于这点,不得不说,微信的坑啊,一起来看看关于返回结果Code码的解释:
就问你无奈不。。。
下面一起来看WXPayEntryActivity这个文件里面主要干了什么吧~
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importcom.tencent.mm.opensdk.modelbase.BaseReq;
importcom.tencent.mm.opensdk.modelbase.BaseResp;
importcom.tencent.mm.opensdk.openapi.IWXAPI;
importcom.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
importcom.tencent.mm.opensdk.openapi.WXAPIFactory;
/** * desc : 微信支付 * version: 1.0 */
publicclassWXPayEntryActivityextendsActivityimplementsIWXAPIEventHandler{
privateIWXAPI api;
privatestaticfinalString APP_ID ="YOU_APP_ID";
@OverridepublicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, APP_ID); api.handleIntent(getIntent(),this); }
@OverrideprotectedvoidonNewIntent(Intent intent){
super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); }
@OverridepublicvoidonReq(BaseReq req){ }
/**
* 得到支付结果回调
*/@OverridepublicvoidonResp(BaseResp resp){ String result;
switch(resp.errCode) {
caseBaseResp.ErrCode.ERR_OK: result ="支付成功,开始采集吧~";
break;
caseBaseResp.ErrCode.ERR_USER_CANCEL: result ="已取消支付,请完成支付后进行采集~";
break;
caseBaseResp.ErrCode.ERR_AUTH_DENIED: result ="支付中断,请完成支付后进行采集~";
break;
default: result ="支付异常,请完成支付后进行采集~";
break; } UIHelper.getSystemHintToast(result); finish(); }}
AndroidManifest添加配置
很easy,只需要添加如下:
新增对应解析实体类
importcom.google.gson.annotations.SerializedName;
/**
* desc : 微信支付返回结果实体类
* version: 1.0
*/publicclassWXPayResultBean{
privateString appid;
privateString noncestr;
@SerializedName("package")
privateString packageX;
privateString partnerid;
privateString prepayid;
privateString sign;
privateString timestamp;
publicStringgetAppid(){
returnappid; }
publicvoidsetAppid(String appid){
this.appid = appid; }
publicStringgetNoncestr(){
returnnoncestr; }
publicvoidsetNoncestr(String noncestr){
this.noncestr = noncestr; }
publicStringgetPackageX(){
returnpackageX; }
publicvoidsetPackageX(String packageX){
this.packageX = packageX; }
publicStringgetPartnerid(){
returnpartnerid; }
publicvoidsetPartnerid(String partnerid){
this.partnerid = partnerid; }
publicStringgetPrepayid(){
returnprepayid; }
publicvoidsetPrepayid(String prepayid){
this.prepayid = prepayid; }
publicStringgetSign(){
returnsign; }
publicvoidsetSign(String sign){
this.sign = sign; }
publicStringgetTimestamp(){
returntimestamp; }
publicvoidsetTimestamp(String timestamp){
this.timestamp = timestamp; }}
正式调用微信下单
首先来看下官方给出正式下单所需要的参数:
而在小主所对应的Activity中,只需要如下操作即可:
privatevoidgetWXPay(finalWXPayResultBean wxPayResultBean){ mIWXApi = WXAPIFactory.createWXAPI(this,null); mIWXApi.registerApp(wxPayResultBean.getAppid());
if(!(mIWXApi.isWXAppInstalled() && mIWXApi.isWXAppSupportAPI())) { UIHelper.getSystemHintToast("请安装微信客户端后使用微信支付,谢谢合作~");
return; } Runnable payRunnable =newRunnable() {
@Overridepublicvoidrun(){ PayReq request =newPayReq(); request.appId = wxPayResultBean.getAppid(); request.partnerId = wxPayResultBean.getPartnerid(); request.prepayId = wxPayResultBean.getPrepayid(); request.packageValue = wxPayResultBean.getPackageX(); request.nonceStr = wxPayResultBean.getNoncestr(); request.timeStamp = wxPayResultBean.getTimestamp() +""; request.sign = wxPayResultBean.getSign(); mIWXApi.sendReq(request); } }; Thread payThread =newThread(payRunnable); payThread.start(); }
这里需要注意的是需要判断是否本地安装了微信,如果没安装,则用户选择微信支付后,界面无反应,所以这里我们判断如果没有安装直接提示用户:请安装微信后进行支付等。
就这么So easy~ 微信支付搞定~
支付宝快速集成(可能都用不了1分钟)
相对于微信支付,支付宝支付可谓是良心之作,集成简单,方便快捷~
首先,来关注一波文档:
1. 快速接入文档;
2. SDK下载;
下载SDK,添加Lib
将下载好的压缩包解压,拷贝jar包到项目中,添加即可:
添加权限声明
仔细核对~~~
AndroidManifest添加配置
添加解析实体类
importandroid.text.TextUtils;
importjava.util.Map;
publicclassPayResultBean{
private
String resultStatus;
privateString result;
privateString memo;
public
PayResultBean(Map rawResult){
if(rawResult ==null) {
return; }
for(String key : rawResult.keySet()) {
if(TextUtils.equals(key,"resultStatus")) { resultStatus = rawResult.get(key); }elseif(TextUtils.equals(key,"result")){ result = rawResult.get(key); }elseif(TextUtils.equals(key,"memo")){ memo = rawResult.get(key); } } }
@OverridepublicStringtoString(){
return"resultStatus={"+ resultStatus +"};memo={"+ memo +"};result={"+ result +"}"; }
/** * @returnthe resultStatus */publicStringgetResultStatus(){
returnresultStatus; }
/** * @returnthe memo */publicStringgetMemo(){
returnmemo; }
/** * @returnthe result */publicStringgetResult(){
returnresult; }}
调起支付宝支付
privatevoidgetAliPay(finalString payInfo){ Runnable payRunnable =newRunnable() {
@Overridepublicvoidrun(){ PayTask alipay =newPayTask(selfActivity); Map result = alipay.payV2(payInfo,false); Message msg =newMessage(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } };
// 必须异步调用Thread payThread =newThread(payRunnable); payThread.start(); }
privateHandler mHandler =newHandler(newHandler.Callback() {
@OverridepublicbooleanhandleMessage(Message msg){
switch(msg.what) {
caseSDK_PAY_FLAG: {
@SuppressWarnings("unchecked") PayResultBean payResult =newPayResultBean((Map) msg.obj);
/**
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/String resultInfo = payResult.getResult();
// 同步返回需要验证的信息String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功if(TextUtils.equals(resultStatus,"9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。Toast.makeText(selfActivity,"支付成功", Toast.LENGTH_SHORT).show(); }else{
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。Toast.makeText(selfActivity,"支付失败", Toast.LENGTH_SHORT).show(); }
break; }
default:
break; }
returnfalse; } });
Ok,集成完毕~
The End
到此,微信以及支付宝支付,集成完毕~
如果后续如有其他问题,LZ及时更新~~~
当然欢迎各位看官提出更好的方案~~~
Thanks 查阅~~~