通过JAVA实现的微信扫描QR码支付

电脑杂谈  发布时间:2020-05-22 06:03:21  来源:网络整理

微信支付接口开发 java_微信支付java开发详细_微信支付java开发详细

付款项目使用springMvc + Dubbo架构实现,并且仅提供外部接口.

换句话说,为什么微信支付比支付宝晚一些. 一句话,它很忙了一段时间,然后没有时间整理. 最近,在完成支付宝付款后,我们还整理了微信付款.

再次,微信支付的DEMO基本上为零,并且在网上找到了很多代码(也许我已经仔细找到了API).

微信支付接口开发 java_微信支付java开发详细_微信支付java开发详细

个人目前不允许使用代码扫描付款,其中包括支付宝的直接个人帐户相关服务也已取消. 因此,必须有一个微信支付商户平台. 我不知道该如何申请微信支付java开发详细,只需使用即可.

商家平台与微信公众账号绑定结合使用. 具体操作已经绑定,您只需要在这里使用即可.

场景介绍

微信支付java开发详细_微信支付java开发详细_微信支付接口开发 java

用户在各种情况下扫描商家显示的QR码以进行付款.

第1步: 商家根据微信支付规则(参见图6.1)为不同商品生成不同的QR码,这些规则显示在各种场景中,供用户扫描和购买.

步骤2: 在微信上扫描QR码(见图6.2)后,用户获取商品的支付信息并指导用户完成支付(见图6.3).

微信支付java开发详细_微信支付接口开发 java_微信支付java开发详细

支付二维码图6.1支付二维码打开微信扫描二维码图6.2打开微信扫描二维码确认支付页面图6.3确认支付页面

步骤(3): 用户确认付款并输入付款密码(见图6.4).

步骤(4): 付款完成后,将提示用户成功付款(如图6.5所示),将通知商人背景付款成功,然后处理发货. <

微信支付java开发详细_微信支付接口开发 java_微信支付java开发详细

用户确认付款并输入密码. 图6.4用户确认付款并输入密码. 付款成功. 图6.5付款成功.

ConfigUtil参数配置:

import java.util.Map;
import java.util.ResourceBundle;
import java.util.SortedMap;
import java.util.TreeMap;
/**
 * 相关配置参数
 * 创建者    张志朋
 * 创建时间    2016年9月28日
 *
 */
public class ConfigUtil {
    /**
     * 服务号相关信息
     */
     public final static String APP_ID = "2016";//服务号的应用ID
     public final static String APP_SECRET = "2016";//服务号的应用密钥
     public final static String TOKEN = "weixinCourse";//服务号的配置token
     public final static String MCH_ID = "2016";//商户号
     public final static String API_KEY = "2016";//API密钥
     public final static String SIGN_TYPE = "MD5";//签名加密方式
     public final static String CERT_PATH = "apiclient_cert.p12";//微信支付证书存放路径地址
     static ResourceBundle resource = ResourceBundle.getBundle("config");
     //微信支付统一接口的回调action
     public final static String NOTIFY_URL = resource.getString("WEIXIN_NOTIFY_URL");
    /**
     * 微信基础接口地址
     */
     //获取token接口(GET)
     public final static String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
     //oauth2授权接口(GET)
     public final static String OAUTH2_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
     //刷新access_token接口(GET)
     public final static String REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";
    // 菜单创建接口(POST)
     public final static String MENU_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    // 菜单查询(GET)
     public final static String MENU_GET_URL = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";
    // 菜单删除(GET)
    public final static String MENU_DELETE_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
    /**
     * 微信支付接口地址
     */
    //微信支付统一接口(POST)
    public final static String UNIFIED_ORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    //微信退款接口(POST)
    public final static String REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
    //订单查询接口(POST)
    public final static String CHECK_ORDER_URL = "https://api.mch.weixin.qq.com/pay/orderquery";
    //关闭订单接口(POST)
    public final static String CLOSE_ORDER_URL = "https://api.mch.weixin.qq.com/pay/closeorder";
    //退款查询接口(POST)
    public final static String CHECK_REFUND_URL = "https://api.mch.weixin.qq.com/pay/refundquery";
    //对账单接口(POST)
    public final static String DOWNLOAD_BILL_URL = "https://api.mch.weixin.qq.com/pay/downloadbill";
    //短链接转换接口(POST)
    public final static String SHORT_URL = "https://api.mch.weixin.qq.com/tools/shorturl";
    //接口调用上报接口(POST)
    public final static String REPORT_URL = "https://api.mch.weixin.qq.com/payitil/report";
    
    public static void commonParams(SortedMap<Object, Object> packageParams){
        // 账号信息
        String appid = ConfigUtil.APP_ID; // appid
        String mch_id = ConfigUtil.MCH_ID; // 商业号
        // 生成随机字符串
        String currTime = PayCommonUtil.getCurrTime();
        String strTime = currTime.substring(8, currTime.length());
        String strRandom = PayCommonUtil.buildRandom(4) + "";
        String nonce_str = strTime + strRandom;
        packageParams.put("appid", appid);// 公众账号ID
        packageParams.put("mch_id", mch_id);// 商户号
        packageParams.put("nonce_str", nonce_str);// 随机字符串
    }
    /**
     * 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
     * @Author    张志朋
     * @param urlCode  void
     * @Date    2016年10月26日
     * 更新日志
     * 2016年10月26日 张志朋  首次创建
     *
     */
    @SuppressWarnings("rawtypes")
    public static void shorturl(String urlCode){
        try {
            String key = ConfigUtil.API_KEY; // key
            SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
            ConfigUtil.commonParams(packageParams);
            packageParams.put("long_url", urlCode);// URL链接
            String sign = PayCommonUtil.createSign("UTF-8", packageParams, key);
            packageParams.put("sign", sign);// 签名
            String requestXML = PayCommonUtil.getRequestXml(packageParams);
            String resXml = HttpUtil.postData(ConfigUtil.SHORT_URL, requestXML);
            Map map = XMLUtil.doXMLParse(resXml);
            String returnCode = (String) map.get("return_code");
            if("SUCCESS".equals(returnCode)){
                String resultCode = (String) map.get("return_code");
                if("SUCCESS".equals(resultCode)){
                    urlCode = (String) map.get("short_url");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

必需的参数APP_ID和APP_SECRET从微信公众号获得,而MCH_ID和API_KEY从商户平台获得. CERT_PATH证书是可选的微信支付java开发详细,但是如果要创建退款界面,则必须使用该证书. NOTIFY_URL是回调地址,自定义路径,但微信平台可以调用您的网址.

API文档地址

该文档具有详细的参数说明. 特定的一代需要xml解析,所以我不会在这里放过. 很多可以留作注释.

付款回调:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-218533-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...