手把手教你 集成支付宝、微信支付功能 SDK

各位亲们,笔者在王者荣耀里面年轻了几次(不知道为什么大家都叫我小学生,我好开心啊,年轻了10几岁)之后,跑来为大家分享两篇sdk集成的文章哈,因为各个大公司的集成sdk的文档。有的时候着实坑爹。也没客服电话。反正是,看了之后就想这么大的公司,为什么文档这么坑爹。或许大厂有大厂的考虑哈。第一篇,集成 微信 、 支付宝 的支付功能。
对了,立下个flag,以后所有的文章笔者的demo均上传 github 。前几天有一个小伙伴问我文章里的代码 出现 bug。但是,笔者完全找不到 demo,无法进行调试 ,场面一度尴尬。。。

一、 集成支付宝 SDK

支付宝文档路径
支付宝的文档很是详细,但是额,找到路径还是蛮难的。或许是笔者比较瞎吧。

1、下载与集成准备

下载路径:支付宝支付架包下载路径
下载完成之后将 下图文件拷贝到自己的项目:

支付宝支付需要集成的架包

拷贝到项目以下路径:
安放路径

笔者将一些多余的文字删除了。

在主项目的 build.gradle 中,添加下面的内容,将 libs 目录作为依赖仓库:

allprojects {
    repositories {
        //引入 libs
        flatDir {
            dirs 'libs'
        }

        google()
        jcenter()

    }
}

在 App Module 的 build.gradle 中,添加下面的内容,将支付宝 SDK 作为项目依赖:

dependencies {
    //引入支付宝 aar 文件
    implementation (name: 'alipaySdk-15.5.9', ext: 'aar')

}

在清单配置文件内添加如下权限

android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
android.permission.WRITE_EXTERNAL_STORAGE

大概就是这样的

<uses-permission  android:name="android.permission.INTERNET" />
<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" />

如果你已经适配了 Android 6.0 以上设备 笔者希望你 申请如下动态权限WRITE_EXTERNAL_STORAGEREAD_PHONE_STATE 否则别怪笔者没有提醒你 会接收到意想不到的惊喜,比如说中个 500 万 啥的。

2、书写功能

首先 强调一点,调用支付宝支付接口 属于耗时操作,需要在工作线程进行调用。

1)、调起代码
    //调用支付宝支付接口
    private void startZfb() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //调用支付宝
                PayTask payTask = new PayTask(MainActivity.this);
                String result = payTask.pay(from, false);
                Message msg = new Message();
                msg.what = 0;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        }).start();
    }

这里有一个字符串 form ,他服务器返给你的,所以不需要处理知己传给 支付宝的 sdk 就行了。就是这么简单。

2)、Handler 处理代码


    private static class MyHandler extends Handler {
        private final WeakReference<MainActivity> mActivity;

        private MyHandler(MainActivity mActivity) {
            this.mActivity = new WeakReference<>(mActivity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            MainActivity activity = mActivity.get();
            if (activity != null) {
                switch (msg.what) {
                    case 0:
                        String result = ((String) msg.obj).replace("{", "")
                                .replace("}", "").replace("resultStatus=", "")
                                .replace("memo=", "").replace("result=", "");
                        Log.d("MainActivity:", result);
                        String num = result.split(";")[0];
                        showPayDialog(num);
                        break;
                }
            }
        }
    }

    //展示吐司
    private static void showPayDialog(String num) {
        String result;
        switch (num) {
            case "9000":
                result = "订单支付成功";
                break;
            case "8000":
                result = "支付结果未知,请联系客服";
                break;
            case "4000":
                result = "订单支付失败";
                break;
            case "5000":
                result = "重复请求";
                break;
            case "6001":
                result = "订单取消成功";
                break;
            case "6002":
                result = "网络连接出错";
                break;

            case "6004":
                result = "支付结果未知,请联系客服";
                break;
            default:
                result = "支付失败,请联系客服";
        }

        Toast.makeText(MyApplication.getContext(), result, Toast.LENGTH_LONG).show();
    }

这里用到了弱引用 的相关代码 防止出现内存泄漏的问题。同样由于使用了弱引用,需要进行判空处理。否则 ,嘿嘿 后果自负。

调用成功的效果 ,就是这样的:


调起支付宝的支付界面

好了 支付宝的集成就到这里了。

二、微信支付 的集成

微信支付的集成相对了 支付更加简洁了。但是 开发文档。。。 笔者是个渣 不过多评论.。
官方链接:微信支付接入指南

1、导入 依赖

两种方式:

 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

或者

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

前者包含统计功能。

2、准备工作

首先, 在你的项目的 包名的直系目录建立一个文件夹 文件夹名称为 “ wxapi”在 该文件夹下 创建一个Activity文件 文件名称为 “WXPayEntryActivity ”。 效果如下图:


微信支付集成所需

3、代码工作

1)、将该 Activity 实现 IWXAPIEventHandler 接口 并实现相关方法;
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    //处理支付回调
    @Override
    public void onResp(BaseResp baseResp) {

    }
}
4、激活支付界面

前期工作都准备好了,下面就是如何激活支付界面了

1、激活微信占用 Activity 的 界面代码代码

    private void startWx() {
        iwxapi = WXAPIFactory.createWXAPI(this, null);
        iwxapi.registerApp("你的appId");
        new Thread(new Runnable() {
            @Override
            public void run() {
                PayReq request = new PayReq(); //调起微信APP的对象
                //下面是设置必要的参数,也就是前面说的参数,这几个参数从何而来请看上面说明
                request.appId = "你的appId";
                request.partnerId = "1234";
                request.prepayId = "1234";
                request.packageValue = "Sign=WXPay";
                request.nonceStr = "12324";
                request.timeStamp = "1234";
                request.sign = "1234567890987654";
                iwxapi.sendReq(request);//发送调起微信的请求
            }
        }).start();
    }
2、被激活的几面代码
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    private IWXAPI iwxapi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);

        iwxapi = WXAPIFactory.createWXAPI(this, null);
        iwxapi.registerApp("appId");
        iwxapi.handleIntent(getIntent(), this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    //处理支付回调
    @Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {


            if (baseResp.errCode == 0) {
                //ToastUtils.showToast("支付成功");
            } else if (baseResp.errCode == -1) {
                //  ToastUtils.showToast("支付失败,请联系客服!");
            } else {
                //  ToastUtils.showToast("支付取消!");
            }
            finish();
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        iwxapi.handleIntent(intent, this);
    }
}

这里面就不放 效果图了,因为 ,笔者测试的App 没有申请相关的 微信需要的配置。

这里强调几点一定要注意 ,否则 微信 会 送你给 -1 大礼包 到怀疑人生。

1)、服务器返回的参数一定要 一一对应;
2)、签名一定要用正式版的签名(笔者就卡这里了,因为签名是后端大佬搞的);
3)、服务器那里二次 md5 生成一定要用点心。

项目地址:ZfbAndWxDemo

欢迎关注.jpg

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

推荐阅读更多精彩内容