2018-03-06

教你在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 查阅~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 最近在做一个养老院的项目,自己做的拦截器,希望能帮助上大家 下面直接把代码粘出来。 首先先新建一个CustomWe...
    Harry小哥哥阅读 215评论 0 0
  • Android获取手机通讯录信息 使用场景以及方向 可运用于所有的需要获取手机通讯录的app,例如消费金融的风控系...
    jinchuang阅读 230评论 0 1
  • 夜是影院,黑是屏幕,我是黑夜里的动画。没有注视,也没有对白,我只是影片中的背景。
    寒夜旋林阅读 375评论 0 0
  • 记得小时候,正月初四这一天是去姥姥家出门的。也就是爸爸这辈子人走丈人的日子,现在大都提到大年初二和...
    陆永强8阅读 842评论 10 3
  • 想起落雪的江南,一代精英们衣衫正单。围炉煮酒,些许风寒。美人随意一笑,登时使文学成为遗产。——《内心的雪景》 前两...
    今晚不打渔阅读 4,910评论 11 15