android微信支付

来源:互联网 发布:上海电力有限公司知乎 编辑:程序博客网 时间:2024/05/16 06:03

微信支付

微信支付的架构

微信支付的系统架构
从这幅图里,必须了解之后的工作,那些是自己的服务器应该做的,那些是自己的客户端应该的。

整体支付步骤

支付步骤图

客户端关键代码

 public void pay(long waybillId, int money) {     // 订单的识别码生成,微信为32字节     String sn = Util.getPaySN();     //网络请求,按照自己的接口,最少要抛过去waybillId,money,sn    }
public void sendPayRequest( String prepayId ) {    //这个方法填充req     req.appId = WX_APP_ID;//app的id     req.partnerId = WX_PAY_MERCHANT_ID;//商户id     req.prepayId = prepayId;//刚才返回的东西     req.packageValue= "Sign=WXPay";//微信接口说暂时必须这样写     req.nonceStr = nonceStr;//一个32字节的识别码,可以自己生成,也可以服务器返回     req.timeStamp = String.valueOf(genTimeStamp());//时间戳        //为prepayId再签名,需要MD5加密,这一部分可以照抄        List<NameValuePair> signParams = new LinkedList<NameValuePair>();         signParams.add(new BasicNameValuePair("appid", req.appId));        signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));        signParams.add(new BasicNameValuePair("package", req.packageValue));        signParams.add(new BasicNameValuePair("partnerid", req.partnerId));        signParams.add(new BasicNameValuePair("prepayid", req.prepayId));        signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));        req.sign = genAppSign(signParams);//如果服务器很照顾你的话,可以得到服务器的返回,就不用自己写了          msgApi.registerApp(WX_APP_ID);//注册         msgApi.sendReq(req);//发送}

之后就是轮询你的支付状态的接口,得到支付结果了。这就是客户端的所有事情了,很简单的。

服务器端关键代码

然而现在我并不会。

注意事项

  • sendReq()返回true却没跳转,基本上一定是签名的问题,点击这里下载那个签名工具
  • accesstoken可以服务端来搞,基本没你啥事
  • 微信支付很奇葩,不需要orderInfo

推荐阅读

https://github.com/kingiol/WeChatDemo
http://blog.fangjie.info/android微信支付
http://www.2cto.com/kf/201409/330136.html

0 0