2018-05-30 10:58:09 sinat_36265222 阅读数 1871
  • 10分钟实现微信小程序支付功能

    老规矩,先看本节效果图 我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。 核心代码就下面这些 一,创建一个云开发小程序 关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频: https://edu.csdn.net/course/play/9604/204528 创建云开发小程序有几点注意的 1,一定不要忘记在app.js里初始化云开发环境。 2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。 1,首先右键pay,然后选择在终端中打开 2,我们使用npm来安装这个依赖。 在命令行里执行 npm i tenpay 安装完成后,我们的pay云函数会多出一个package.json 文件 到这里我们的tenpay依赖就安装好了。 四,编写云函数pay 完整代码如下 //云开发实现支付 const cloud = require( 'wx-server-sdk') cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = { appid: '你的小程序appid', mchid: '你的微信商户号', partnerKey: '微信支付安全密钥', notify_url: '支付回调网址,这里可以先随意填一个网址', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; exports.main = async(event, context) => { const wxContext = cloud.getWXContext()let { orderid, money } = event; //3,初始化支付 const api = tenpay.init(config);let result = await api.getPayParams({ out_trade_no: orderid, body: '商品简单描述', total_fee: money, //订单金额(分), openid: wxContext.OPENID //付款用户的openid }); return result; } 一定要注意把appid,mchid,partnerKey换成你自己的。 到这里我们获取小程序支付所需参数的云函数代码就编写完成了。 不要忘记上传这个云函数。 出现下图就代表上传成功 五,写一个简单的页面,用来提交订单,调用pay云函数。 这个页面很简单, 1,自己随便编写一个订单号(这个订单号要大于6位) 2,自己随便填写一个订单价(单位是分) 3,点击按钮,调用pay云函数。获取支付所需参数。 下图是官方支付api所需要的一些必须参数。 下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。 六,调用wx.requestPayment实现支付 下图是官方的示例代码 这里不在做具体讲解了,完整的可以看视频。 实现效果 1,调起支付键盘 2,支付完成 3,log日志,可以看出不同支付状态的回调 上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。 下图是支付失败的回调, 下图是支付完成的状态。 到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

    618 人正在学习 去看看 邱石

    1.微信公众平台->开发->基本配置->服务器配置


服务端使用java开发的,第一次服务器的验证代码如下:

 @GetMapping("/checkWechat")
	 public void wechatCallbackApi(@RequestParam("signature") String
	 signature,
	 @RequestParam("timestamp") String timestamp,
	 @RequestParam("nonce") String nonce,
	 @RequestParam("echostr") String echostr,HttpServletResponse response)
	 throws ServletException, IOException {
	 log.info("[服务器配置],进入是数据signature{},timestamp{},nonce{},echostr{}",signature,timestamp,nonce,echostr);
	
	 PrintWriter print;
	
	 // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
	 if (signature != null && CheckoutUtil.checkSignature(signature,
	 timestamp, nonce)) {
	
	 log.info("[服务器配置],验证通过","success");
	 try {
	 print = response.getWriter();
	 print.write(echostr);
	 print.flush();
	 } catch (IOException e) {
	 e.printStackTrace();
	 }
	
	 }
	 }

 注意CheckOutUtil验证工具类中的token要和上面微信公众号中填写的token一致。

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CheckoutUtil {
	
	 // 与接口配置信息中的Token要一致
    private static String token = "XXXXXX";

    /**
     * 验证签名
     * 
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        String[] arr = new String[] { token, timestamp, nonce };
        // 将token、timestamp、nonce三个参数进行字典序排序
        // Arrays.sort(arr);
        sort(arr);
        StringBuilder content = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            content.append(arr[i]);
        }
        MessageDigest md = null;
        String tmpStr = null;

        try {
            md = MessageDigest.getInstance("SHA-1");
            // 将三个参数字符串拼接成一个字符串进行sha1加密
            byte[] digest = md.digest(content.toString().getBytes());
            tmpStr = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        content = null;
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
    }

    /**
     * 将字节数组转换为十六进制字符串
     * 
     * @param byteArray
     * @return
     */
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    /**
     * 将字节转换为十六进制字符串
     * 
     * @param mByte
     * @return
     */
    private static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];
        String s = new String(tempArr);
        return s;
    }
    public static void sort(String a[]) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j < a.length; j++) {
                if (a[j].compareTo(a[i]) < 0) {
                    String temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }

}

    编写好响应服务器配置的接口后,要确保可以在外网能够访问到。就可以在微信中点击确定,成功的话,微信会提示配置成功。

    服务器配置成功后我们就可以将上面的服务器响应接口改成一个接收消息处理的接口,如下,我们可以对不同的事件通知进行处理。

	@PostMapping("/checkWechat")
	public void wechatCallbackApi(@RequestBody String notifyData) throws ServletException, IOException {

		log.info("[服务器配置],进入审核事件通知{}", notifyData);

		PushMessage message = (PushMessage) XmlUtil.fromXML(notifyData, PushMessage.class);

//		String msgid = message.getFromUserName() + message.getCreateTime() + message.getEvent();

		Objects.requireNonNull(message, "[微信接收会员信息事件通知],返回为空!");

		log.info("[服务器配置],进入审核事件通知转对象信息结果{}", message);

		if ("submit_membercard_user_info".equals(message.getEvent())) {// 激活卡的通知
																		// 可以查询用户信息
			cardService.getOpenCardInfo(message);
		} else if ("update_member_card".equals(message.getEvent())) {// 修改会员卡信息
			log.info("[服务器配置],修改用户会员卡信息推送{}", message);
		} else if ("card_not_pass_check".equals(message.getEvent())) {// 会员卡审核不通
			MpMemberCard card = mpMemberCardRepository.findByCardId(message.getCardId());
			if(card!=null){
				card.setState(false);
				mpMemberCardRepository.save(card);
			}else{
				log.info("[服务器配置],会员卡审核不通过,未查询到该卡信息{}", message);
			}
			
		} else if ("card_pass_check".equals(message.getEvent())) {// 会员卡审核通过
			MpMemberCard card = mpMemberCardRepository.findByCardId(message.getCardId());
			if(card!=null){
				card.setState(true);
				mpMemberCardRepository.save(card);
			}else{
				log.info("[服务器配置],会员卡审核通过,未查询到该卡信息{}", message);
			}
			
		} else if ("card_sku_remind".equals(message.getEvent())) {// 库存报警给管理员发个通知吧
			Notice notice = new Notice();
			notice.setContent(message.getCardId() + "库存不过百");
			notice.setCreatetime(DateUtil.currentDate());
			notice.setCreater(1);
			noticeRepository.save(notice);
		} else {
			log.info("[服务器配置],会员卡信息推送{}", message);
		}

	}

 这里推荐可以使用simpleFrameWork解析xml。

1.我们可以将要解析的数据编成一个类如上面的PushMessage.class。

package com.ddzrh.wxcard.reponse;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

import lombok.Data;

@Data
@Root(name = "xml", strict = false)
public class PushMessage {
	
	@Element(name = "ToUserName")
	private String ToUserName;
	
	@Element(name = "FromUserName")
	private String FromUserName;

	@Element(name = "CreateTime", required = false)
	private Long CreateTime;

	@Element(name = "Event", required = false)
	private String Event;
	
	@Element(name = "MsgType", required = false)
	private String MsgType;
	
	@Element(name = "CardId", required = false)
	private String CardId;
	
	@Element(name = "UserCardCode", required = false)
	private String UserCardCode;
	
	@Element(name = "ModifyBonus", required = false)
	private Integer ModifyBonus;

	@Override
	public String toString() {
		return "PushMessage [ToUserName=" + ToUserName + ", FromUserName=" + FromUserName + ", CreateTime=" + CreateTime
				+ ", Event=" + Event + ", MsgType=" + MsgType + ", CardId=" + CardId + ", UserCardCode=" + UserCardCode
				+ "]";
	}
	
	

}

2.编写一个XmlUtil工具类,这里的工具类是借用慕课网廖师兄的。

package com.lly835.bestpay.utils;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

import java.io.Writer;

/**
 * Created by 廖师兄
 * 2017-07-02 15:30
 */
public class XmlUtil {

    private static XStream xStream = new XStream(new XppDriver(new NoNameCoder()) {

        @Override
        public HierarchicalStreamWriter createWriter(Writer out) {
            return new PrettyPrintWriter(out) {
                // 对所有xml节点的转换都增加CDATA标记
                boolean cdata = true;

                @Override
                @SuppressWarnings("rawtypes")
                public void startNode(String name, Class clazz) {
                    super.startNode(name, clazz);
                }

                ////当对象属性带下划线时,XStream会转换成双下划线,
                // 重写这个方法,不再像XppDriver那样调用nameCoder来进行编译,而是直接返回节点名称,避免双下划线出现
                @Override
                public String encodeNode(String name) {
                    return name;
                }


                @Override
                protected void writeText(QuickWriter writer, String text) {
                    if (cdata) {
                        writer.write("<![CDATA[");
                        writer.write(text);
                        writer.write("]]>");
                    } else {
                        writer.write(text);
                    }
                }
            };
        }
    });
    /**
     * 对象转xml
     * @param obj
     * @return
     */
    public static String toXMl(Object obj) {
        //使用注解设置别名必须在使用之前加上注解类才有作用
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj);
    }

    public static Object fromXML(String xml, Class objClass) {
        Serializer serializer = new Persister();
        try {
            return serializer.read(objClass, xml);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2017-09-15 09:07:52 towtotow 阅读数 198
  • 10分钟实现微信小程序支付功能

    老规矩,先看本节效果图 我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。 核心代码就下面这些 一,创建一个云开发小程序 关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频: https://edu.csdn.net/course/play/9604/204528 创建云开发小程序有几点注意的 1,一定不要忘记在app.js里初始化云开发环境。 2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。 1,首先右键pay,然后选择在终端中打开 2,我们使用npm来安装这个依赖。 在命令行里执行 npm i tenpay 安装完成后,我们的pay云函数会多出一个package.json 文件 到这里我们的tenpay依赖就安装好了。 四,编写云函数pay 完整代码如下 //云开发实现支付 const cloud = require( 'wx-server-sdk') cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = { appid: '你的小程序appid', mchid: '你的微信商户号', partnerKey: '微信支付安全密钥', notify_url: '支付回调网址,这里可以先随意填一个网址', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; exports.main = async(event, context) => { const wxContext = cloud.getWXContext()let { orderid, money } = event; //3,初始化支付 const api = tenpay.init(config);let result = await api.getPayParams({ out_trade_no: orderid, body: '商品简单描述', total_fee: money, //订单金额(分), openid: wxContext.OPENID //付款用户的openid }); return result; } 一定要注意把appid,mchid,partnerKey换成你自己的。 到这里我们获取小程序支付所需参数的云函数代码就编写完成了。 不要忘记上传这个云函数。 出现下图就代表上传成功 五,写一个简单的页面,用来提交订单,调用pay云函数。 这个页面很简单, 1,自己随便编写一个订单号(这个订单号要大于6位) 2,自己随便填写一个订单价(单位是分) 3,点击按钮,调用pay云函数。获取支付所需参数。 下图是官方支付api所需要的一些必须参数。 下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。 六,调用wx.requestPayment实现支付 下图是官方的示例代码 这里不在做具体讲解了,完整的可以看视频。 实现效果 1,调起支付键盘 2,支付完成 3,log日志,可以看出不同支付状态的回调 上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。 下图是支付失败的回调, 下图是支付完成的状态。 到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

    618 人正在学习 去看看 邱石

在正式进行微信公众号开发前,

需要在公众号的后台进行相关的配置,

只有配置正确,

才能做后续的开发。


2peizhi.jpg


同时也要做一些准备工作,

像购买好自己的域名,空间服务器,域名备案,网站建设等。

微信公众号开发基本配置视频教程在线观看

http://edu.csdn.net/course/detail/2586/40524

2018-06-06 16:13:20 qq_33240000 阅读数 15848
  • 10分钟实现微信小程序支付功能

    老规矩,先看本节效果图 我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。 核心代码就下面这些 一,创建一个云开发小程序 关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频: https://edu.csdn.net/course/play/9604/204528 创建云开发小程序有几点注意的 1,一定不要忘记在app.js里初始化云开发环境。 2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。 1,首先右键pay,然后选择在终端中打开 2,我们使用npm来安装这个依赖。 在命令行里执行 npm i tenpay 安装完成后,我们的pay云函数会多出一个package.json 文件 到这里我们的tenpay依赖就安装好了。 四,编写云函数pay 完整代码如下 //云开发实现支付 const cloud = require( 'wx-server-sdk') cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = { appid: '你的小程序appid', mchid: '你的微信商户号', partnerKey: '微信支付安全密钥', notify_url: '支付回调网址,这里可以先随意填一个网址', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; exports.main = async(event, context) => { const wxContext = cloud.getWXContext()let { orderid, money } = event; //3,初始化支付 const api = tenpay.init(config);let result = await api.getPayParams({ out_trade_no: orderid, body: '商品简单描述', total_fee: money, //订单金额(分), openid: wxContext.OPENID //付款用户的openid }); return result; } 一定要注意把appid,mchid,partnerKey换成你自己的。 到这里我们获取小程序支付所需参数的云函数代码就编写完成了。 不要忘记上传这个云函数。 出现下图就代表上传成功 五,写一个简单的页面,用来提交订单,调用pay云函数。 这个页面很简单, 1,自己随便编写一个订单号(这个订单号要大于6位) 2,自己随便填写一个订单价(单位是分) 3,点击按钮,调用pay云函数。获取支付所需参数。 下图是官方支付api所需要的一些必须参数。 下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。 六,调用wx.requestPayment实现支付 下图是官方的示例代码 这里不在做具体讲解了,完整的可以看视频。 实现效果 1,调起支付键盘 2,支付完成 3,log日志,可以看出不同支付状态的回调 上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。 下图是支付失败的回调, 下图是支付完成的状态。 到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

    618 人正在学习 去看看 邱石

我们在进行微信公众平台开发,基本都会遇到一个问题:配置服务器.....这个问题不大不小,还是挺繁琐的.......下图是配置完成后的样子,后面给大家详细介绍每一步的步骤:


下图为微信公众号开发验证机制:由用户发送请求给微信服务器,微信服务器根据地址URL访问请求个人开发服务器,然后个人开发服务器响应返回给微信服务器(其中有数据报文验证,Token字段验证是其中之一),微信服务器接收后响应给用户,整个过程完成无误后,即服务器配置完成....


第一步:申请个人服务器及域名

(1)腾讯云:https://cloud.tencent.com/

(2)阿里云:https://www.aliyun.com/

(3)华为云:https://www.huaweicloud.com/

以上提供云服务的公司都可以选择,其中域名备案通常需要一个月时间,三家公司都有一个共同点就是要钱,哈哈哈哈大哭......既然这么说了就给大家介绍一下免费的安静

(4)魔方云:https://www.mfyun.com.cn/act/freehost/ ,直戳链接免费领取一年虚拟云主机活动,虚拟云主机和云服务器的区别我就不介绍了,两者感觉都能满足个人对微信公众号的基本开发,虚拟云主机自带域名很合适短期用户需求


注册号云虚拟主机后,滚动至下方根据需求将数据库开启,这个活动免费赠送100M容量MySQL数据库

第二步:添加服务器地址URL


服务器地址URL为:http://或者https://加申请域名,填写之前可以先进行个人服务器访问测试,访问其根目录页面

第三步:填写令牌(Token)

微信服务器与个人服务器数据报验证是采用doGet形式进行验证,本文采用的是php代码验证


  验证代码中的token字符串要和微信服务器配置中的令牌(Token)一致

第四步:上传完整验证代码至个人服务器

ftp文件传输协议,将完整代码上传至个人云服务器或者云虚拟主机,本人采用的是notepad++的ftp插件,ftp插件下载和导入请自行百度。

4.1与个人服务器建立连接


其中Hostname为:云虚拟主机的上传地址,Username为ftp用户,password为ftp密码

连接成功即显示服务器中文件目录


上传完整代码:1.新建index.php文件2.将完整代码copy后点击保存,3.成功后可以看到目录出现上传文件


第五步:尝试启动微信服务器配置

将完整URL填入,这里是http://+域名+index.php,令牌Token值需要和代码中的token一样,消息加解密密匙可以点击随即获取,加解密方式选明文模式

到这里终于配置完服务器,但这只是总体开发万里长征中的第一步,路漫漫其修远,然上下而求索兮............

希望以上解释说明能对大家有所帮助,谢谢支持!

2015-10-10 14:40:36 u010592604 阅读数 1278
  • 10分钟实现微信小程序支付功能

    老规矩,先看本节效果图 我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。 核心代码就下面这些 一,创建一个云开发小程序 关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频: https://edu.csdn.net/course/play/9604/204528 创建云开发小程序有几点注意的 1,一定不要忘记在app.js里初始化云开发环境。 2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。 1,首先右键pay,然后选择在终端中打开 2,我们使用npm来安装这个依赖。 在命令行里执行 npm i tenpay 安装完成后,我们的pay云函数会多出一个package.json 文件 到这里我们的tenpay依赖就安装好了。 四,编写云函数pay 完整代码如下 //云开发实现支付 const cloud = require( 'wx-server-sdk') cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = { appid: '你的小程序appid', mchid: '你的微信商户号', partnerKey: '微信支付安全密钥', notify_url: '支付回调网址,这里可以先随意填一个网址', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; exports.main = async(event, context) => { const wxContext = cloud.getWXContext()let { orderid, money } = event; //3,初始化支付 const api = tenpay.init(config);let result = await api.getPayParams({ out_trade_no: orderid, body: '商品简单描述', total_fee: money, //订单金额(分), openid: wxContext.OPENID //付款用户的openid }); return result; } 一定要注意把appid,mchid,partnerKey换成你自己的。 到这里我们获取小程序支付所需参数的云函数代码就编写完成了。 不要忘记上传这个云函数。 出现下图就代表上传成功 五,写一个简单的页面,用来提交订单,调用pay云函数。 这个页面很简单, 1,自己随便编写一个订单号(这个订单号要大于6位) 2,自己随便填写一个订单价(单位是分) 3,点击按钮,调用pay云函数。获取支付所需参数。 下图是官方支付api所需要的一些必须参数。 下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。 六,调用wx.requestPayment实现支付 下图是官方的示例代码 这里不在做具体讲解了,完整的可以看视频。 实现效果 1,调起支付键盘 2,支付完成 3,log日志,可以看出不同支付状态的回调 上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。 下图是支付失败的回调, 下图是支付完成的状态。 到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

    618 人正在学习 去看看 邱石

直接一点哈,用的是Java开发的、SpringMvc。自己只是把自己遇到的东西 写下来 ,方便以后查看,大家也可以了解一下。有什么问题可以一起探讨!

如果启用“开发者中心”,则微信公众平台本身的自动回复,自定义菜单则不能用,就必须需要自己去写代码实现功能。

一、配置

这个配置按照微信提示配置就可以了。

二、后台代码

@RequestMapping(value="/api",method=RequestMethod.GET)
	@ResponseBody
	public String initGetAPI(HttpServletRequest request, HttpServletResponse response)
	{
		 // 微信加密签名  
        String signature = request.getParameter("signature");  
        // 时间戳  
        String timestamp = request.getParameter("timestamp");  
        // 随机数  
        String nonce = request.getParameter("nonce");  
        // 随机字符串  
        String echostr = request.getParameter("echostr");
        //正式微信公众号
        String token = "Token";
        try
        {
	        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  
	        if (SignUtil.checkSignature(token,signature, timestamp, nonce)) {  
	            return echostr;  
	        }  
        }catch(Exception ex)
        {
        	return "Illegal Call";
        }
		return "ERROR";
	}
	
	@RequestMapping(value="/api",method=RequestMethod.POST)
	public void initPostAPI(HttpServletRequest request, HttpServletResponse response)
	{
         //业务逻辑
         }





注:一般遇到错误按照微信提示是可以解决的 这里不存什么大问题。


三、开发者中心选择性用

因为启用开发者中心的话自动回复、自定义菜单就没法用了。就得全部自己开发,这个工程量还有有一点小大的,所以没有非要用到开发者中心的话就不要去用。微信开发功能稍微多一点的话,估计都得用了。


2018-09-27 12:29:32 a909422229 阅读数 1239
  • 10分钟实现微信小程序支付功能

    老规矩,先看本节效果图 我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。 核心代码就下面这些 一,创建一个云开发小程序 关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频: https://edu.csdn.net/course/play/9604/204528 创建云开发小程序有几点注意的 1,一定不要忘记在app.js里初始化云开发环境。 2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。 1,首先右键pay,然后选择在终端中打开 2,我们使用npm来安装这个依赖。 在命令行里执行 npm i tenpay 安装完成后,我们的pay云函数会多出一个package.json 文件 到这里我们的tenpay依赖就安装好了。 四,编写云函数pay 完整代码如下 //云开发实现支付 const cloud = require( 'wx-server-sdk') cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = { appid: '你的小程序appid', mchid: '你的微信商户号', partnerKey: '微信支付安全密钥', notify_url: '支付回调网址,这里可以先随意填一个网址', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; exports.main = async(event, context) => { const wxContext = cloud.getWXContext()let { orderid, money } = event; //3,初始化支付 const api = tenpay.init(config);let result = await api.getPayParams({ out_trade_no: orderid, body: '商品简单描述', total_fee: money, //订单金额(分), openid: wxContext.OPENID //付款用户的openid }); return result; } 一定要注意把appid,mchid,partnerKey换成你自己的。 到这里我们获取小程序支付所需参数的云函数代码就编写完成了。 不要忘记上传这个云函数。 出现下图就代表上传成功 五,写一个简单的页面,用来提交订单,调用pay云函数。 这个页面很简单, 1,自己随便编写一个订单号(这个订单号要大于6位) 2,自己随便填写一个订单价(单位是分) 3,点击按钮,调用pay云函数。获取支付所需参数。 下图是官方支付api所需要的一些必须参数。 下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。 六,调用wx.requestPayment实现支付 下图是官方的示例代码 这里不在做具体讲解了,完整的可以看视频。 实现效果 1,调起支付键盘 2,支付完成 3,log日志,可以看出不同支付状态的回调 上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。 下图是支付失败的回调, 下图是支付完成的状态。 到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

    618 人正在学习 去看看 邱石

一、打开微信公众号管理界面

本人使用的springboot项目地址:https://github.com/binarywang/weixin-java-mp-demo-springboot

使用微信公众号开发可以用该项目,配置一下即可,很简单的配置。

鼠标滑到最底部的《开发–基本配置》 

点击我要成功开发者。

二、 填写相关服务器配置信息:

A.需要设置开发者密码,点就开启,扫码一下即可。

B.需要注意的是,验证token只能支持80端口或者443端口,其他端口不支持。

URL:填写服务器的域名地址

token:自己定义链接,其他无所谓,明文与兼容都可以。

三、打开公众号设置,配置一下你的服务器域名,注意一个月只能修改三次。

点击设置:配置域名,注意需要验证一下,下载文件,创建一个项目,复制到项目中,如果通过域名可以访问到该文件,则就可以通过验证。其他两个也是这个流程。即可全部通过验证。

四、通过之后就可以了。还有更加简单的方式进行测试配置是否可以用。点击开发者工具

点击公众平台测试账号:与上面配置基本相同,只不过不需要配置过多的链接,扫描二维码即可关注测试。

五、最后一定要记得,配置服务器完成后,点击启动。否则没有效果的。测试的时候无所谓。会有启动的延迟,不会立马生效,本人遇到了一次这个问题,一直接收不到消息,后来发现是这个问题,晚上配置完后睡了一觉,早上启动项目就可以接收了。

晕~有问题留言或者联系。

下一篇:对微信公众号接收消息进行回复

没有更多推荐了,返回首页