首页 网赚项目正文

微信导师微信号_微信61怎么改微信号_微信公众微信号

微信导师微信号_微信61怎么改微信号_微信公众微信号-第1张图片

今天,我想向您介绍微信小程序如何实现付款过程. 在开发之前,我们必须首先获取商家的appId和mchId,最后获取商家的键值. 这些价值将在商家申请成功后通过电子邮件发送给商家,因此如果未获得这些价值,将无法进行微信支付.

如果您想学习分布式,微服务,JVM,多线程,体系结构微信导师微信号,java,python童鞋,请不要扫描代码,否则后果自负!

获得以上所有值后,我们就可以开始微信支付开发了.

微信支付过程大致分为四个步骤:

1. 在小程序中获取用户的登录信息,成功后即可获取用户的代码值

2. 在用户自己的服务器上,请求微信获取用户的openid接口. 成功后,可以获得用户的openid值

微信官方api地址: 单击以打开链接

3. 在用户自己的服务器上请求微信的统一订购界面微信导师微信号,成功下订单后即可获取prepay_id值

微信官方api地址: 单击以打开链接

4. 通过微信小程序支付订单,最终实现微信支付功能

微信官方api地址: 单击以打开链接

具体流程图如下:

让我们从详细介绍微信支付的整个过程开始:

第一步是获取用户信息,它是applet中的登录界面:

//app.js
App({
  onLaunch: function() {
    wx.login({
      success: function(res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
  }
})

applet的正式编写方法是这样的,以通过登录获取用户的代码值. 由于具有此代码值,因此需要请求用户的openid.

获取用户代码值后,我们需要我们的服务器请求微信的地址:

服务器代码如下:

    public Map<String,Object> onLogin(String code){
        Map<String,Object>result=new HashMap<>();
        String url=ConstantUtils.getSessionKeyUrl+"?appid="+ ConstantUtils.appId+
                "&secret="+ConstantUtils.secret+"&js_code="+code+"&grant_type="+ConstantUtils.grantType;
        JSONObject httpResult=HttpUtils.httpGet(url);
        result.put("openid",httpResult.get("openid"));
        result.put("session_key",httpResult.get("session_key"));
        result.put("expires_in",httpResult.get("expires_in"));
        return  result;
    }

微信导师微信号_微信61怎么改微信号_微信公众微信号-第4张图片

由于官方的微信api非常清楚,因此这里不会过多介绍特定的界面介绍.

请求此接口后,我们可以获取用户的openid. 此参数将在下一个统一订单界面中使用.

最后一个是统一的订购界面,该界面主要用于获取支付界面所需的prepay_id字段值. 统一的下订单界面发生在我们自己的服务器端,我们需要请求微信: 该界面. 关于此接口,有很多要注意的地方,尤其是标志的生成规则. 在早期阶段,我无法下订单,因为标牌验证多次失败. 另一点是,total_fee的总和以美分为单位,并且只能是整数,而不能是小数.

在下面查看我的服务器的代码:

 public Map<String,Object> createOrder(String openId){
        Map<String,Object>result=new HashMap<>();
        result.put("status","1");
        result.put("payType","weixin");
        result.put("orderId","12345678");
        String formData=orderService.commitData(openId);
        String httpResult = HttpUtils.httpXMLPost(ConstantUtils.createOrderUrl,formData);
        try {
            Map<String, String> resultMap = WXPayUtil.xmlToMap(httpResult);
            result.put("package", "prepay_id=" + resultMap.get("prepay_id"));
            result.put("nonceStr",resultMap.get("nonce_str"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        String times= WXPayUtil.getCurrentTimestamp()+"";
        result.put("timeStamp",times);
        Map<String, String> packageParams = new HashMap<String ,String>();
        packageParams.put("appId", ConstantUtils.appId);
        packageParams.put("signType", ConstantUtils.signType);
        packageParams.put("nonceStr",result.get("nonceStr")+"");
        packageParams.put("timeStamp",times);
        packageParams.put("package", result.get("package")+"");//商户订单号
        String sign="";
        try {
            sign= WXPayUtil.generateSignature(packageParams, ConstantUtils.key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        result.put("paySign",sign);
        return result;
    }

上面使用的WXPayUtil工具类是官方微信演示中的工具类. 其中的功能非常完整. 您可以从官方网站下载它.

请求xml生成功能代码如下:

 public String commitData(String openId){
        String nonceStr= WXPayUtil.generateUUID();
        String body="JSAPI支付测试";
        Map<String, String> packageParams = new HashMap<String ,String>();
        packageParams.put("appid", ConstantUtils.appId);
        packageParams.put("body",body);
        packageParams.put("mch_id", ConstantUtils.mchId);
        packageParams.put("nonce_str",nonceStr);
        packageParams.put("notify_url", ConstantUtils.notifyUrl);//支付成功后的回调地址
        packageParams.put("openid",openId+"");//支付方式
        packageParams.put("out_trade_no", "12345678");//商户订单号
        packageParams.put("sign_type", ConstantUtils.signType);
        packageParams.put("spbill_create_ip","127.0.0.1");
        packageParams.put("total_fee", "1");//支付金额,这边需要转成字符串类型,否则后面的签名会失败
        packageParams.put("trade_type", ConstantUtils.tradeType);//支付方式
        String sign="";
        try {
            sign= WXPayUtil.generateSignature(packageParams, ConstantUtils.key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String formData = "<xml>";
        formData += "<appid>"+ ConstantUtils.appId+"</appid>"; //appid
        formData += "<body>" + body+ "</body>";
        formData += "<mch_id>"+ ConstantUtils.mchId+"</mch_id>"; //商户号
        formData += "<nonce_str>"+nonceStr+"</nonce_str>";
        formData += "<notify_url>"+ ConstantUtils.notifyUrl+"</notify_url>";
        formData += "<openid>"+openId+"</openid>";
        formData += "<out_trade_no>" + "12345678" + "</out_trade_no>";
        formData += "<sign_type>"+ ConstantUtils.signType+"</sign_type>";
        formData += "<spbill_create_ip>"+"127.0.0.1"+"</spbill_create_ip>";
        formData += "<total_fee>" + "1" + "</total_fee>";
        formData += "<trade_type>"+ ConstantUtils.tradeType+"</trade_type>";
        formData += "<sign>"+sign+"</sign>";
        formData += "</xml>";
        return formData;
    }

我们已经实现了签名签名的拼接规则工具类,我们可以直接调用它.

最后也是最关键的一步是小程序中的微信支付流程. 官方付款代码为:

wx.requestPayment(
{
'timeStamp': '',
'nonceStr': '',
'package': '',
'signType': 'MD5',
'paySign': '',
'success':function(res){},
'fail':function(res){},
'complete':function(res){}
})

有关这些字段的说明,请访问官方网站. 特别详细,地址在上面.

在最后一笔付款中,我们仍然需要使用手机付款. 最小付款单位可以是1美分. 在测试期间,我们只需要支付1美分即可.

这样,整个微信小程序支付过程就可以了,一般过程如上所述. 当然,还有很多细节要注意. 这不是一篇可以总结的文章. 对于为服务帐户付款的人,本文更容易理解. 如果没有这样的经验,看起来还是有些困惑. 初次接触时,我也学习了很长时间. 因此,我打算制作有关此小程序付款的说明视频. 我会将视频地址放在我的正式帐户中或百度云磁盘上(项目代码也会放在其中).

视频教程已制作完成. 尽管有点冗长,但它充满了干货,并且在开发过程中遇到了各种坑.

视频地址1: 单击以打开链接

视频地址2: 单击以打开链接

小程序教程地址: 小程序教程集合URL

如果对文章有任何疑问或疑问,可以添加我的订阅号并在上面留言. 我将定期更新订阅号上的最新博客. 如果麻烦的话,可以直接加我微信: lzqcode

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://www.shccfdc.com/2020/07/59/

评论