Android App支付系列(一):微信支付接入详细指南(附官方支付demo)

写在前面

一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一。梳理了下微信支付的接入,今天给大家分享下腾讯旗下的微信支付SDK的接入流程。

Android App支付系列(二):支付宝SDK接入详细指南

Android开发:使用EasyPay打造全能移动支付框架:集成微信,支付宝,银联支付的开源支付框架

接入流程

1.申请开发者资质

地址:https://open.weixin.qq.com/

使用公司管理者/高层帐号登录微信开放平台,进入“账号中心”,进行开发者资质认证,需要填写公司资料,包括但不限于,公司注册号,公司营业执照,公司对外办公电话,公司对公银行卡信息(卡号,发卡行)。审核时间为一周左右。 
备注:因为从2015年10月1日起,国家实行三证(组织机构代码证,企业营业执照,税务登记证)合一,所以组织机构代码处填写-工商执照注册号,同样,组织机构代码证,上传-企业工商营业执照。 
备注2:进行开发者资质认证需要支付300元人名币/年,只有具备开发者资质认证的开发者才能够使用app支付,授权登录等接口。

2.申请APP_ID/APP_KEY 
每个应用/游戏要调用微信的接口都需要有一个微信标志,这个唯一标志通常成为APP_ID或者APP_KEY,各开放平台差异不大 
进入管理中心,创建移动应用,每个开发者具有10个应用的创建机会,好在创建的应用可以随时删除。已上线的应用就不建议手贱删除!! 
申请appid需要填写应用信息:应用名称,包名,签名(keystore的md5值去分号小写),icon(28*28 & 108*108),app下载地址等信息,即可分配到一个appid。 
备注:测试支付时,务必使用申请时填写的keystore文件签名,包名也需要核对清楚,必然无法调起支付,返回-1错误码。

3.申请支付能力 
在管理中心,查看需要集成支付能力的app,找到“微信支付”一栏,点击右侧“申请开通”,填写一些企业信息后等待审核,审核时间为一周左右,审核通过后,会得到一个企业商户号及密码,对公银行卡中将收到几分钱,进入商户平台,输入收到的金钱金额以验证。验证通过后即可开始集成支付调用。在这之前,调用支付接口是无法完成支付的。

4.代码集成微信支付 
支付流程图 
这里写图片描述

微信支付流程图白话版: 
1.客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:

params.put("appid", appID);// 微信appid,选择性上传,服务器写死亦可
params.put("money", money);// 支付金额,单位:分
params.put("name", goodsName);// 商品名称
params.put("currencytype", "CNY");// 支付币种,只能填CNY,代表人民币
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

备注:以上是参数字段是我们公司服务器定义,给服务器用以获取预支付订单号prePayId用。 
备注2:详细字段请参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 
2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端; 
3.手机客户端使用prePayId及商品信息调起微信客户端进行支付; 
3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等; 
4.微信客户端回调支付结果给咱们的APP客户端; 
5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)

微信支付代码:

IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
mWxApi.registerApp(WX_APPID);
            /**
             * 请求app服务器得到的回调结果
             */
            @Override
            public void onGet(JSONObject jsonObject) {
                if (mWxApi != null) {
                    PayReq req = new PayReq();

                    req.appId = WX_APPID;// 微信开放平台审核通过的应用APPID
                    try {
                        req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号
                        req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取
                        req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成
                        req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出
                        req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接写死,服务器返回的也是这个固定值
                        req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    mWxApi.sendReq(req);
                    Log.d("发起微信支付申请");
                }

            }
   
  • 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
  • 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

在app包下新建wxapi包,比如app包名为com.xiongit.app,那个新建的包路径为com.xiongit.app.wxapi,该包下新建WXPayEntryActivity,继承自任意Activity。该Activity用以接收支付结果回调,清单声明此Activity的格式为

<activity
       android:name=".wxapi.WXPayEntryActivity"
       android:exported="true"
       android:launchMode="singleTop"/>
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

WXPayEntryActivity代码示例

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{

    private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";

    private IWXAPI api;
    private static final String APP_ID = "your app id";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pay_result);

        api = WXAPIFactory.createWXAPI(this, APP_ID);
        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) {
    }

    /**
     * 得到支付结果回调
     */
    @Override
    public void onResp(BaseResp resp) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付结果码
    }
}
   
  • 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
  • 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

回调中errCode值列表:

0 支付成功 
-1 发生错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 
-2 用户取消 发生场景:用户不支付了,点击取消,返回APP。

清单menifest申明所需权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

备注:支付结果最终以app服务器的得到的异步通知为准。

微信SDK混淆

-keep class com.tencent.mm.sdk.** {
   *;
}
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

update 20160704

当支付时,微信尚未登录,得不到任何回调,如果调起支付时有弹窗进度框,并且你想在得到响应码后让它消失是行不通的,需要在跳出的onStop中处理进度条,不然未登录并且用户取消了支付时进度条无法消失。

update 20160722

当支付时,WXPayEntryActivity会以透明的形式启动,所以你可能需要在支付完成得到支付响应码后手动finish该activity,不然你自己写的支付页面的activity需要返回两次才能退出,因为第一次按下back键实际是finish掉WXPayEntryActivity.第二次才是你自己的activity.

完事了,祝各位集成微信支付成功! 
本文作者xiong_it,链接:http://blog.csdn.net/xiong_it 
最后附上微信官方支付demo下载:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1,吐槽语:官方demo下载藏的有点深。。。开放平台居然没有提供下载,放在微信支付商户平台

原文链接:http://blog.csdn.net/xiong_it/article/details/51685033

抚仙湖流域矢量边界及DEM高程数据集是针对抚仙湖地区开展流域分析、生态环境监测及水文地理建模的重要基础数据资源。本资源包含可编辑的ArcGIS MXD工程文件、标准化的Shapefile矢量边界文件以及高精度的DEM(数字高程模型)成图TIF影像文件,能够为流域范围划定、地形地貌特征分析、水文过程模拟及生态环境评估等提供系统的空间支撑。其中,可编辑MXD文件采用ArcGIS平台标准格式构建,预设了完整的图层结构、投影坐标系统及制图符号体系。用户可在该工程文件中直接加载、编辑或叠加相关专题数据,实现对抚仙湖流域及周边地区的多尺度可视化与专题制图。该MXD文件不仅保留了矢量边界与DEM的空间配准关系,还提供了标准化的图例、比例尺、指北针和标注模板,便于科研人员或规划设计单位快速生成符合制图规范的地图成果。标准Shape文件则定义了抚仙湖流域的精确矢量边界,边界范围依据高分辨率地形数据及水系分布情况提取,经空间校正与拓扑检查,确保边界闭合性与空间一致性。该矢量边界可直接用于流域分区统计、土地利用分析、生态分区划定等多种GIS应用场景。Shape文件采用WGS84地理坐标系,兼容ArcGIS、QGIS等主流GIS软件,可灵活用于各类空间分析模型中。DEM高程成图TIF文件基于高精度数字地形数据(分辨率优于90 m)生成,经过投影转换、滤波平滑和边缘裁剪,能够真实反映抚仙湖流域内地形起伏特征。该DEM可用于计算坡度、坡向、高程分布以及地形起伏度等多种地形参数,并为流域水文分析(如径流模拟、汇流路径提取、集水区划分等)提供关键的地形输入数据。此外,DEM成图TIF还配备标准化的色阶渲染方案,使地势高低分布直观可视,适用于科学告、规划图集及环境展示等多种制图用途。打开mxd文件前,记得解压所有压缩文件夹。如遇问题,请随时联系博主本人:一ge科研小菜菜
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值