微信、支付宝支付那点事

这篇具有很好参考价值的文章主要介绍了微信、支付宝支付那点事。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信、支付宝支付那点事

公司要在MUI开发的APP里添加上支付功能,然后爬坑开始了。。

因为公司用的是Java语言开发的服务端,所以就要找Java版本的支付代码了
首先在dcloud的问答里搜索看有没有相关文章,找到了下面两篇有用的

  • java生成支付宝快捷支付订单教程及源码
  • 第一次调微信支付正常弹出支付页面并成功支付了,再次调用时就一直报错时怎么回事

第一篇是配置支付宝支付的,第二篇是我在下面发了一个回复求微信支付的代码(所以代码在回复里)

dcloud官方给的php代码地址:https://github.com/dcloudio/H5P.Server

下面说说我在爬坑的时候碰到的障碍
1. Java语言输出方法有print(),println() 切记一定不能用println() 这个方法输出后会换行,所以一直是失败状态,我开发的时候是支付宝报的错ALI10
2. 微信支付,从APP里请求到服务端接口,在接口里会调用一次微信的接口,此时涉及到一次签名(sign),切记在签名前发送给微信服务器的参数要按照a-z排列好,然后在去签名,完成之后请求微信支付接口,微信给返回一些XML数据,其中只有prepay_id有用,其他需要的参数基本上都是在微信的配置类里配置好了的,此时转换成的json格式数据写出的还有一次签名(sign),这个签名跟上面第一次的签名不一样,要记得在签名参数最后带上key
3. 支付宝支付的参数,地址类的字符串比如:notify_url等,不需要URLEncoder.encode(),参数都要加上""
4. xcode里,如果APP跳转到支付宝打开的是网页版的,而不是支付宝APP,就需要在xcode里配置plist文件添加下面这些代码

<key>LSApplicationQueriesSchemes</key><array><string>weixin</string><string>wechat</string><string>alipay</string><string>sinaweibo</string><string>weibosdk</string><string>tencentweiboSdkv2</string><string>weibosdk2.5</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqopensdkapiV2</string><string>mqqwpa</string><string>mqqopensdkapiV3</string><string>wtloginmqq2</string></array>

下面是我Java服务端的代码,给大家分享一下
支付宝(使用了支付宝商户SDK)

publicvoid alipayapi(HttpServletRequest request,HttpServletResponse response)throwsException{
    response.setContentType("text/plain; charset=UTF-8");PrintWriterout= response.getWriter();////////////////////////////////////请求参数////////////////////////////////////////支付类型String payment_type ="1";//必填,不能修改//服务器异步通知页面路径String notify_url =ApplicationListener.getBasePath()+"pay/sdk/alipay/notify";//需http://格式的完整路径,不能加?id=123这类自定义参数//页面跳转同步通知页面路径//        String return_url = URLEncoder.encode(ApplicationListener.getBasePath() + "pay/wap/alipay/return");//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost///商户订单号String out_trade_no = request.getParameter("orderId");//商户网站订单系统中唯一订单号,必填//订单名称String subject ="支付预定金";//必填//付款金额String total_fee = request.getParameter("total_fee");//必填//商品展示地址String show_url =ApplicationListener.getBasePath();//必填,需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html//订单描述String body ="订单支付定金";//选填//超时时间String it_b_pay ="1d";//选填//把请求参数打包成数组Map<String,String> sParaTemp =newHashMap<String,String>();
    sParaTemp.put("service","mobile.securitypay.pay");
    sParaTemp.put("partner",AlipayConfig.partner);
    sParaTemp.put("seller_id",AlipayConfig.seller_id);
    sParaTemp.put("_input_charset",AlipayConfig.input_charset);
    sParaTemp.put("payment_type", payment_type);
    sParaTemp.put("notify_url", notify_url);
    sParaTemp.put("out_trade_no", out_trade_no);
    sParaTemp.put("subject", subject);
    sParaTemp.put("total_fee", total_fee);
    sParaTemp.put("show_url", show_url);
    sParaTemp.put("body", body);
    sParaTemp.put("it_b_pay", it_b_pay);String sHtmlText ="";for(Iterator iter = sParaTemp.keySet().iterator(); iter.hasNext();){String name =(String) iter.next();String value = sParaTemp.get(name);
        sHtmlText += name +"=\""+ value +"\"&";}//建立请求System.out.println(sHtmlText);
    sHtmlText = sHtmlText.substring(0, sHtmlText.length()-1);String sign = RSA.sign(sHtmlText,AlipayConfig.PRIVATE,AlipayConfig.input_charset);String outText = sHtmlText +"&sign=\""+URLEncoder.encode(sign,"UTF-8")+"\"&sign_type=\""+AlipayConfig.sign_type+"\"";out.print(outText);}

微信支付(用到了微信Java版SDK,下载地址)
RequestData.java

publicclassRequestData{privateString appid;privateString body;privateString mch_id;privateString nonce_str;privateString notify_url;privateString out_trade_no;privateString sign;privateString spbill_create_ip;privateString total_fee;privateString trade_type;//getter,setter}
publicvoid alipayapi(HttpServletRequest request,HttpServletResponse response)throwsException{
    response.setContentType("text/plain; charset=UTF-8");PrintWriterout= response.getWriter();//微信分配的公众账号ID(企业号corpid即为此appId)String appid =Configure.getAppid();//必填//商品或支付单简要描述String body ="预定金支付";//必填//微信支付分配的商户号String mch_id =Configure.getMchid();//必填//随机字符串,不长于32位。推荐随机数生成算法String nonce_str =RandomStringGenerator.getRandomStringByLength(32);//必填//接收微信支付异步通知回调地址String notify_url =ApplicationListener.getBasePath()+"pay/sdk/wxpay/notify";//必填//商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号String out_trade_no = request.getParameter("orderId");//必填//签名,详见签名生成算法String sign ="";//必填//APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。String spbill_create_ip =IpUtil.getIpAddr(request);//必填//订单总金额,单位为分,详见支付金额Double total_fee_d =Double.parseDouble(request.getParameter("total_fee"));Double total_fee_s = total_fee_d *100;String total_fee = total_fee_s.intValue()+"";//必填//取值如下:JSAPI,NATIVE,APP,详细说明见参数规定String trade_type = request.getParameter("trade_type");//必填//=============================以下参数 非必填 ===============================//商品名称明细列表String detail ="";//非必填//附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据String attach ="";//非必填//符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型String fee_type ="";//非必填//终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"String device_info ="";//非必填//商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠String goods_tag ="";//非必填//订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则String time_start ="";//非必填//订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则//注意:最短失效时间间隔必须大于5分钟String time_expire ="";//非必填//trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。String product_id ="";//非必填//no_credit--指定不能使用信用卡支付String limit_pay ="";//非必填//trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。openid如何获取,可参考【获取openid】。//企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换String openid ="";//非必填RequestData reqData =newRequestData();
    reqData.setAppid(appid);
    reqData.setBody(body);
    reqData.setMch_id(mch_id);
    reqData.setNonce_str(nonce_str);
    reqData.setNotify_url(notify_url);
    reqData.setOut_trade_no(out_trade_no);
    reqData.setSpbill_create_ip(spbill_create_ip);
    reqData.setTotal_fee(total_fee);
    reqData.setTrade_type(trade_type);
    sign =Signature.getSign(reqData);
    reqData.setSign(sign);String result =newHttpsRequest().sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", reqData);System.out.println(result);Map map =XMLParser.getMapFromXML(result);String prepay_id =(String) map.get("prepay_id");System.out.println(prepay_id);String timestamp =String.valueOf(System.currentTimeMillis()/1000);String s="appid="+appid+"&noncestr="+nonce_str+"&package=Sign=WXPay"+"&partnerid="+
            mch_id+"&prepayid="+prepay_id+"&timestamp="+timestamp+"&key="+Configure.getKey();String newSign = MD5.MD5Encode(s).toUpperCase();StringBuffer json =newStringBuffer();
    json.append("{\"appid\":\"");
    json.append(appid);
    json.append("\",\"noncestr\":\"");
    json.append(nonce_str);
    json.append("\",\"package\":\"");
    json.append("Sign=WXPay");
    json.append("\",\"partnerid\":\"");
    json.append(mch_id);
    json.append("\",\"prepayid\":\"");
    json.append(prepay_id);
    json.append("\",\"timestamp\":\"");
    json.append(timestamp);
    json.append("\",\"sign\":\"");
    json.append(newSign);
    json.append("\"}");System.out.println(json.toString());out.print(json.toString());}

 文章来源地址https://www.toymoban.com/news/detail-711219.html

到了这里,关于微信、支付宝支付那点事的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于聚合根,领域事件的那点事---深入浅出理解DDD

    作者:京东物流 赵勇萍 最近有空会跟同事讨论DDD架构的实践落地的情况,但真实情况是,实际中对于领域驱动设计中的实体,值对象,聚合根,领域事件这些战术类的实践落地,每个人理解依然因人而异,大概率是因为这些概念还是有一些抽象,同时有有别于传统的MVC架构

    2023年04月27日
    浏览(32)
  • Bootstrap.yml那点事 Spring Cloud 配置中心多环境配置

    加载顺序 若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载,bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。 配置区别 bootstrap是spring cloud的配置上下文加载。由spring-cloud-context包加载。引入依赖 具体加载类

    2023年04月08日
    浏览(36)
  • 开发那点事(十六)从零开始搭建一个NFT数字藏品平台

    写在前面的话 从6月初到七月研究了将近一个月NFT 区块链这方面的东西,从啥都不会到了解原理,总算是有点成果了,在这里分享给大家。 核心大纲 百度超级链开放网络(Solidity语言) 集成openzeppelin中的ERC721合约快速完成合约开发 Springboot 作为后台开发语言调用线上合约 通

    2024年01月16日
    浏览(41)
  • 【微信小程序】要在两个<view>之间绘制一条分割线,使用border属性和样式

    要在两个 view 之间绘制一条分割线,可以使用 border 属性以及适当的样式设置。以下是一个示例代码: 在上述代码中,使用了一个 view 标签作为容器,内部包含两个内容 view 和一个分割线 view 。 .container 类设置了 display: flex; 属性,使内容和分割线水平排列。 .content 类设置了

    2024年02月07日
    浏览(28)
  • 机电公司管理小程序|基于微信小程序的机电公司管理小程序设计与实现(源码+数据库+文档)

    机电公司管理小程序目录 目录 基于微信小程序的机电公司管理小程序设计与实现 一、前言 二、系统设计 三、系统功能设计  1、机电设备管理 2、机电零件管理 3、公告管理 4、公告类型管理 四、数据库设计    五、核心代码   六、论文参考 七、最新计算机毕设选题推荐

    2024年03月19日
    浏览(35)
  • ThinkPHP 5 支付宝微信支付(支付宝H5,微信H5、APP支付、公众号支付)

     Pay.php支付控制器 模型:Weixin.php Weixin.php Alipay.php 支付宝需要的submit文件: 点击下载 wx.html在使用微信客户端支付时需要的页面    

    2024年02月08日
    浏览(35)
  • java对接微信支付:JSAPI支付(微信公众号支付)

    本文是【微信JSAPI支付】文章,主要讲解商户对接微信支付,简洁版测试 文章目录 一、JSAPI支付接入前准备 二、代码片段 1.引入Maven依赖 2.后端业务请求接口 3.前端调起支付请求方法 总结 1、JSAPI支付首先需要注册、认证一个公众号(大概300块一年) 微信公众号注册 2、申请成为

    2024年02月08日
    浏览(51)
  • H5接入支付流程-微信支付&支付宝支付

    H5对接微信支付和支付宝支付,app无法发版,需要支持在app内和浏览器内同时使用。 于是借此机会对前端接入对第三方支付进行了调研,本次只讨论微信支付,和支付宝支付。 文档地址:微信支付 微信支付方式主要包括,对普通商家主要提供以下7种方式 付款码支付:比如大

    2024年02月19日
    浏览(35)
  • 【微信支付】java-微信小程序支付-V3接口

    最开始需要在微信支付的官网注册一个商户; 在管理页面中申请关联小程序,通过小程序的 appid 进行关联;商户号和appid之间是多对多的关系 进入微信公众平台,功能-微信支付中确认关联 具体流程请浏览官方文档:接入前准备-小程序支付 | 微信支付商户平台文档中心 流程走

    2024年02月06日
    浏览(42)
  • uniapp实现微信支付、支付宝支付

    本文只介绍了代码片段,如果需要支付前准备的流程可以继续浏览查找(狗头) 该方法是开发uniapp时使用的,未涉及5+APP 前端部分并不复杂,只是有些流程步骤有些杂乱,正常都是后端去和微信交互。前端只需要将每个参数对应的填好,发送请求即可。 一、配置manifest中的微

    2024年02月01日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包