Laravel微信公众号支付开发总结

一、开发准备工作

    1.登录微信公众平台,完成微信服务号认证(这样才能有微信支付的权限);

    2.申请“微信支付”;

Laravel微信公众号支付开发总结_第1张图片

    3.申请云服务器和域名;


二、微信公众号支付正式开发

    1.在微信支付-->使用教程-->公众号支付,即可查看微信公众号支付开发文档,下载PHP的SDK和DEMO文档,解压后目录如下;

Laravel微信公众号支付开发总结_第2张图片

    2.按照doc文件夹下的说明文档;

    a、替换cert中API证书文件(在商户平台-->账户中心-->API 安全中下载)

Laravel微信公众号支付开发总结_第3张图片

    b、修改lib/WxPay.Config.php中的配置信息(APPID、MCHID好说,KEY和APPSECRET需要设置)

KEY: 在商户平台-->账户中心-->API 安全中,设置API秘钥(这里设置为32位随机字符串,自己定义,注意保存);

Laravel微信公众号支付开发总结_第4张图片

APPSECRET:在微信公众平台-->开发-->基本配置,重置开发者密码(AppSecret),顺便添加IP白名单;

Laravel微信公众号支付开发总结_第5张图片

    3.把解药的SDK拷贝到自己想放的目录,我的是放app/Http/WxAPI文件夹下,在控制器的方法中就可以调用demo中下单的方法,通过return view('wxpay.payment',['jsApiParameters'=>$jsApiParameters,'total_fee'=>$total_fee]); 返回参数到前台页面,前台调用jsapi实现支付;

Laravel微信公众号支付开发总结_第6张图片

Laravel微信公众号支付开发总结_第7张图片

    开发过程中踩过的坑:

    a、找不到类,无法实例化;(检查是否声明namespace、require文件路径)

    Laravel微信公众号支付开发总结_第8张图片

    b、在//①、获取用户openid时,代码执行到$openId = $tools->GetOpenid();服务器回调返回code时(这里微信服务器 返回code时是直接在url地址后面加上code的值,因此注意是get方式传值),控制器中该跳转方法会执行两次,并且返回的code值不一样;

Laravel微信公众号支付开发总结_第9张图片

    解决办法如下,在拼接地址后面加&connect_redirect=1;(网上搜的,为什么这么加没找到~0~);

Laravel微信公众号支付开发总结_第10张图片

    c、提示url未注册时,检查微信商户平台-->产品中心-->开发配置-->公众号支付中,支付授权目录是否添加;

Laravel微信公众号支付开发总结_第11张图片

    d、在notify_url回调地址中总是收不到微信服务器返回的数据;

第一步:检查路由是否为post方式传值,因为服务器返回的数据流是通过post传给商户平台的;

第二步:如果还是无法收到,可以通过在线测试工具,模拟服务器返回数据,检测代码是否有问题;(https://getman.cn/  )仅供参考,我也是网上随意找的一个;

Laravel微信公众号支付开发总结_第12张图片


三、官方文档阅读意见

    1.微信公众平台-->开发-->开发者工具选项下的“开发者文档”中可以重点了解如下目录和微信JS-SDK说明文档中“微信支付- 发起 一个微信请求”部分,内容不多,可以借鉴;

Laravel微信公众号支付开发总结_第13张图片

    2.微信公众平台-->微信支付-->使用教程-->公众号支付,可以重点了解如下部分;

Laravel微信公众号支付开发总结_第14张图片

以上为微信公众号开发心得,有很多不足,仅供参考。


四、网上视屏笔记

微信开发需要具备的条件:

1.服务号(企业);2.通过微信认证(300元/年);3. 开通微信支付功能;4.通过备案的IP地址(仅限80端口)


步骤:

1.验证JSSDK(第一次签名)

    a、获取access_token;b、获取jsapi_ticket;c、签名(sha1);d、返回参数;

2.获取预处理prepare_id(第二次签名)    

    2.1.获取openid

    a、获取code;b、通过code获取openid;

    2.2.notify_url

    2.3.签名(md5)

    2.4.获取prepare_id

3.返回微信支付参数(第三次签名)

    a、获取prepare_id;b、签名(md5);c、返回参数;


    

你可能感兴趣的:(PHP)