欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微信的支付流程

程序员文章站 2022-07-13 16:52:51
...

暂时写那么多:之后再补充,谢谢
用户(发起支付的手段)(把商品的id发送过去)——商户服务器根据App的请求——生成对应的订单信息——请求微信的服务器——返回预订单信息——商户服务器
——生成订单信息——APP(用户看到订单信息)——确认付款——转到微信API

接入过程分为
1.libs包的导入:libammsdk.jar

初始化微信的支付组件:

api = WXAPIFactory.createWXAPI(this,App.weichat_id);//实例化IWXAPI,还有一个参数是是否检查签名
api.registerApp(App.weichat_id);//将应用注册到微信

与我方服务器请求生成订单

public void pay(int produceId){

        String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";//我们服务器的网址

        Toast.makeText(mainActivity, "获取订单中...", Toast.LENGTH_SHORT).show();

        String itemInfo = "{item:'"+  produceId+"'}"; //"{item:'001'}"

        HttpRequest httpRequest = new HttpRequest(url,itemInfo);//得到服务器的回调

            httpRequest.requestHttp(new HttpListener()
            {
                @Override
                public void onResult(String result) 
                {
                    super.onResult(result); 
                    handleResult(result);
                }
            });
    }


public void handleResult(String result)
{
    try
    {
        if (result != null)
        {
            JSONObject json = new JSONObject(result);

            if(null != json && !json.has("retcode"))
            {
                PayReq req = new PayReq();
                //req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
                req.appId           = json.getString("appid");
                req.partnerId       = json.getString("partnerid");// 微信支付分配的商户号
                req.prepayId        = json.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取
                req.nonceStr        = json.getString("noncestr");
                req.timeStamp       = json.getString("timestamp");
                req.packageValue    = json.getString("package");
                req.sign            = json.getString("sign");
                req.extData         = "app data"; // optional
                Toast.makeText(mainActivity, "正常调起支付", Toast.LENGTH_SHORT).show();
                // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
                api.sendReq(req);
            }
            else
            {
                Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
                Toast.makeText(mainActivity, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
            }
        }
        else
        {
            Log.d("PAY_GET", "服务器请求错误");
            Toast.makeText(mainActivity, "服务器请求错误", Toast.LENGTH_SHORT).show();
        }   
    }
    catch(Exception e)
    {
        Log.e("PAY_GET", "异常:"+e.getMessage());
        Toast.makeText(mainActivity, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
    }   
}

之后如果订单信息一致,微信SDK就会在客户端弹出支付订单的信息,

当用户确认支付或者取消支付或者发生网络连接错误的时候
就会在
com.xxxx.xxx.wxapi(就是你主项目所在的目录新建一个xwapi的目录)
里有个WXPayEntryActivity

   /**
     * 得到支付结果回调
     */
    //0 支付成功  -1发生错误   -2用户取消   
    @Override
    public void onResp(BaseResp resp) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付结果码
        //与我们的服务器做验证的消息  
    }
}
相关标签: 微信支付