1) 支付流程
1、 首先是把该app注册到微信,
2、 发起一个线程生成支付订单。这里要注意金额的单位为分,只能为整数。
3、把支付订单post到后台生成一个预支付订单,返回prepay_id(预支付回话标识)
4、将参数再次签名传输给app发起支付,
5、支付结果会在WXPayEntryActivity类里onResp函数中查看,当errCode为:0表示成功 -1表示错误 -2表示用户取消。
2) 第三方登录微信实现
è注册应用
private IWXAPI msgApi;
msgApi = WXAPIFactory.createWXAPI(this, null);
msgApi.registerApp(Constants.APP_ID);
è然后拉取微信到授权登陆界面
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wxdemo";
msgApi.sendReq(req);
è在WXEntryActivity中的onResp(BaseResp resp)方法中获取code:
String code = ((SendAuth.Resp) resp).code;//需要转换一下才可以
注意:要能回调到这个方法需要注册此activity:
msgApi.handleIntent(getIntent(), this);
3) 阅读微信支付开发文档
èApp支付
就是在移动端应用App中集成开放SDK调起微信支付模块完成支付的模式;
è支付账户(申请支付方式)
当在微信支付平台上申请支付方式后,会受到相应的邮件,在该邮件中主要是包含着4个参数,分别是appid,mch_id,key,secret;
Appid:标识当前我们在微信开发平台上创建应用的唯一标识;
Mch_id(微信支付商户号):商户申请微信支付后,有微信支付分配的商户收款账户;
Key(Api密钥):
交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播;
Secret(AppSecret):
AppSecret是APPID对应的接口密码,用于获取接口调用凭证access_token时使用。在微信支付中,先通过OAuth2.0接口获取用户openid,此openid用于微信内网页支付模式下单接口使用。在开发模式中获取AppSecret(成为开发者且帐号没有异常状态)。
4) App支付开发步骤
è申请应用
在微信中申请应用,目的就是为了获取appid;
è注册Appid
先要引用微信支付的jar包;
其次就是在调用Api前,先要向微信进行注册Appid;
IWXAPI api = WXAPIFactory.createWXAPI($.getContext(), null);
api.registerApp(WXPayConfig.APP_ID);
这里的WXPayConfig,APP_ID就是表示的是当前该应用在微信中所注册的应用所申请的appid.
5) 调起支付
商户服务器生成支付订单,先调用统一下单API生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付;
PayReq req = new PayReq();
req.appId = jsonObject.getString("appid");
req.partnerId = jsonObject.getString("partnerid");
req.prepayId = jsonObject.getString("prepayid");
req.nonceStr = jsonObject.getString("noncestr");
req.timeStamp = jsonObject.getString("timestamp");
req.packageValue = jsonObject.getString("package");
req.sign = jsonObject.getString("sign");
api.sendReq(req);
首先调用的是微信支付的统一下单的Api,此时主要是为了生成prepay_id,当生成了preapay_id,此时就可以进行再次签名,生成了这个签名后,再传递给APP,此时在App中就进行调起支付。
è这个调起支付,首先在APP端要先向服务器端发出请求,服务器端得到请求后,先不是进行的签名操作,而是进行的是生成prepay_id,得到了这个prepay_id后,判断如果所返回的result_code为success时,那么此时就进行签名操作,注意的是,上面的向服务器传递参数,是为了在服务器中生成预付单,当预付单生成成功时,此时就进行的是签名操作,并将所生成的json格式的数据传递给APP端,由APP端发起微信支付。
6) 支付结果回调
1)首先在我们的项目路径下创建一个wxapi目录,在该目录下,要创建WXPayEntryActivity类(包名和类名要都是这两个),因为当服务器端签名成功后,就会掉起支付界面,此时回调到APP端,首先执行的是WXPayEntryActivity类中的onResp()方法,主要是处理的是服务器端所返回的是三种状态,分别是0(success),-1(failure),-2(cancel);