android 微信支付过程,android 微信 支付 接入流程总结

[TOC]

客户端微信支付

登录微信官方开放平台微信,注册账号,在微信开放平台申请应用,输入已上线app的正式的应用包名和签名,微信提供了一个签名工具,一般使用它提供的签名工具生成签名,然后填写到对应的位置。。android微信接入指南,对于微信支付,还需要用户单独申请微信支付的功能,填写信息,签约等等。。

准备完成之后,会获取到相应的appId appSecret 商户秘钥,商户Id等。。APP支付接入指南

需要注意的一点是,微信支付分为好几种扫描支付 公众号支付 app支付等,但是他们并不一样,公众号支付和扫码支付是在公众号注册用户,申请支付,而APP支付是在微信开放平台进行申请的。。请不要搞混乱,我因此乱了两周了。。。

一切准备完毕,接下来就进入正式的开发,我们的流程是,客户端预定商品,服务器生成订单号OrderId,然后根据此订单号,由服务器去统一下单,生成预支付订单,然后由服务器把需要调起支付页面的7个参数通过json格式传给客户端。。

{

"package": "Sign=WXPay", 包名

"timestamp": 1476092570, 随机时间

"sign": "6960633xxxxxxxx7F6FA1EFxxxxx2D72", 签名

"partnerid": "13xxxxxx1", 商户id

"appid": "wxxxxxxxxxx4e7d", appid

"prepayid": "wx201610xxxxxxxx0663390994", 预支付订单号

"noncestr": "36a0de4b95314703881d051668a8" 随机字段值

}

接下来就是客户端对微信端的工作了。。下载微信SDK ,然后添加到项目中。。或者使用build导入的形式

跟微信登录和分享是一样的,同样在包名下新建一个package - 包名.wxapi,在这个新包下创建两个类,WXPayEntryActivity,WXEntryActivity,这两个类主要是用来获取微信支付,微信登录分享之后的回调。。还需要在配置文件下对此类进行声明,主要是说明能够让外部引用。。 android:exported="true"

android:name=".wxapi.WXPayEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:launchMode="singleTop"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

下面是配置微信登录分享的信息

android:name=".wxapi.WXEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.Translucent.NoTitleBar" />

配置也配置好了,接下来就是在对应的类中的onResp()方法中,对返回的errorCode进行解读,不同的code代表不同的意思。。

switch (resp.errCode) {

case 0:

result = "支付成功!!!";

break; //支付成功

case -1:

result = "支付失败!!!";

break; //支付失败

case -2:

result = "取消支付!!!";

break; //取消支付

}

if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

AlertDialog.Builder builder = new AlertDialog.Builder(WXPayEntryActivity.this);

builder.setMessage(getString(R.string.pay_result_callback_msg, result));

builder.setTitle("支付结果");

builder.setPositiveButton(WXPayEntryActivity.this.getString(R.string.ok), new DialogInterface.OnClickListener() {

@Override

public void onClick(final DialogInterface dialog, int which) {

dialog.dismiss();

WXPayEntryActivity.this.finish();

}

});

builder.create().show();

}

一切准备完成,下面就是发送支付请求,调起支付界面了。。

由于是服务器把所有的参数都准备好,所以只需要解析服务器数据即可。。

但是在发送微信请求之前需要根据appid创建IWxapi,然后注册。。。一般使用全局的wxapi实例,所以可以在Application中对微信进行注册。。

IWapi wxapi = WXAPIFactory.createWXAPI(this, Constants.SOCIAL_WECHAT_APP_ID, true);

wxapi.registerApp(Constants.SOCIAL_WECHAT_APP_ID);

//根据服务器返回的数据,调起支付

PayReq req = new PayReq();

req.appId = JsonUtil.getStringValue("appid", jsonObject);

req.partnerId = JsonUtil.getStringValue("partnerid", jsonObject);

req.packageValue = "Sign=WXPay";

req.nonceStr = JsonUtil.getStringValue("noncestr", jsonObject);

req.timeStamp = JsonUtil.getStringValue("timestamp", jsonObject);

req.prepayId = JsonUtil.getStringValue("prepayid", jsonObject);

req.sign =JsonUtil.getStringValue("json", jsonObject);

Boolean sendResult = App.getContext().wxapi.sendReq(req);

请求发送结束之后,我们就可以在WxpayEntryActivity中对支付结果做出处理。。

errotCode有三种选择 0:正常支付 -1:支付失败 -2:取消支付

下面是一些判断之类的:

if (App.getContext().wxPayApi.isWXAppInstalled()) {

if (App.getContext().wxPayApi.isWXAppSupportAPI()) {

payByWechat(orderId);

} else {

App.getContext().showMessage("您当前的微信版本不支持支付");

}

} else {

App.getContext().showMessage("您还未安装微信客户端");

}

微信的签名很大的坑,需要要按照他的签名规则才可以。。微信签名规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值