8. PHP接入微信的三种支付:APP支付、公众号支付、扫码支付

微信的支付逻辑与支付宝的支付有一些差别。为了让客户端忽略这些差别,统一调用。本sdk做了对应处理。

# SDK调用

微信支付不同接口需要的参数会有差别。请大家在使用接口时,仔细查看文档。


use Payment\ChargeContext;
use Payment\Config;
use Payment\Common\PayException;

// 微信支付,必须设置时区,否则发生错误
date_default_timezone_set(‘Asia/Shanghai‘);

//  生成订单号 便于测试
function createPayid()
{
    return date(‘Ymdhis‘, time()).substr(floor(microtime()*1000),0,1).rand(0,9);
}

// 订单信息
$payData = [
    "order_no"  => createPayid(),
    "amount"    => ‘0.01‘,// 单位为元 ,最小为0.01
    "client_ip" => ‘127.0.0.1‘,
    "subject"   => ‘测试支付‘,
    "body"  => ‘支付接口测试‘,
    "extra_param"   => ‘‘,
];

// 微信扫码支付,需要设置的参数
$payData[‘product_id‘]  = ‘123456‘;

// 微信公众号支付,需要的参数
$payData[‘openid‘] = ‘otijfvr2oMz3tXnaQdKKbQeeBmhM‘;// 需要通过微信提供的api获取该openid

/**
 * 包含客户的配置文件
 * 本次 2.0 版本,主要的改变是将配置文件独立出来,便于客户多个账号的情况
 * 已经使用不同方式读取配置文件,如:db  file   cache等
 */
$wxconfig = [
    ‘app_id‘    => ‘wxxxx‘,  // 公众账号ID
    ‘mch_id‘    => ‘xxxx‘,// 商户id
    ‘md5_key‘   => ‘xxxxxx‘,// md5 秘钥

    ‘notify_url‘    => ‘http://test.helei.com/pay-notify.html‘,
    ‘time_expire‘   => ‘14‘,

    // 涉及资金流动时,需要提供该文件
    ‘cert_path‘ => dirname(__FILE__) . DIRECTORY_SEPARATOR . ‘wx‘ . DIRECTORY_SEPARATOR . ‘apiclient_cert.pem‘,
    ‘key_path‘  => dirname(__FILE__) . DIRECTORY_SEPARATOR . ‘wx‘ . DIRECTORY_SEPARATOR . ‘apiclient_key.pem‘,
];

/**
 * 实例化支付环境类,进行支付创建
 */
$charge = new ChargeContext();

try {

    // 微信 扫码支付
    $type = Config::WX_CHANNEL_QR;

    // 微信 APP支付
    //$type = Config::WX_CHANNEL_APP;

    // 微信 公众号支付
    //$type = Config::WX_CHANNEL_PUB;
    $charge->initCharge($type, $wxconfig);
    $ret = $charge->charge($payData);
} catch (PayException $e) {
    echo $e->errorMessage();exit;
}

if ($type === Config::WX_CHANNEL_QR) {
    $url = urlencode($ret);
    echo "<img alt=‘扫码支付‘ src=‘http://paysdk.weixin.qq.com/example/qrcode.php?data={$url}‘ style=‘width:150px;height:150px;‘/>";
} elseif ($type === Config::WX_CHANNEL_PUB) {
    $json = $ret;
    var_dump($json);exit;
} elseif (stripos($type, ‘wx‘) !== false) {
    var_dump($ret);
}

?>

这里扫码支付与公众号支付分别需要提供不同的参数。请一定注意进行区分。否则调用相应端口会抛出异常。

配置文件

参数 参数名 参数说明 是否必须
app_id 公众账号ID/应用id 微信分配的公众账号ID
mch_id 商户号 微信支付分配的商户号
md5_key 加密的key 在商户中心设置
notify_url 通知地址 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
time_expire 交易过期时间 单位为分钟,过期后无法再次支付
cert_path 密钥文件 可在微信商户后台中下载 否,退款需要
key_path 密钥文件 可在商户中心下载 否,退款需要

这里需要注意的是,app_id,由于微信的三个支付接口,需要对应两个不同的app_id。因此再开发中一定要注意。

请求参数

参数 参数名 参数说明 是否必须
order_no 订单号 平台根据规则生成的订单号,最长64位,要在商户数据库中唯一 必须
amount 交易总金额 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 必须
client_ip 客户端IP 用户在创建交易时,该用户当前所使用机器的IP。 必须
subject 商品名称 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字。 必须
body 商品描述 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 必须
extra_param 公用回传参数 如果用户请求时传递了该参数,则返回给商户时会回传该参数。 可选
product_id 商品ID 扫码支付,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 可选
openid 用户标识 公众号支付,此参数必传,用户在商户appid下的唯一标识。 可选

返回值描述

三种支付方式返回值因为处理方式不同,微信方面返回了不同的类型。

* app支付返回了需要调用的数组。调用客户端的方式 查看微信文档

* 扫码支付返回了一个地址。可生成一个二维码,完成支付。

* 公众号支付,返回的是一个json数据。可直接放入微信的sdk完成jsapi调用。

时间: 2024-10-06 12:54:51

8. PHP接入微信的三种支付:APP支付、公众号支付、扫码支付的相关文章

Java微信支付(公众号,扫码)

很高兴与大家分享微信支付(公众号,扫码),针对Java语言和公众号支付,扫码,只是简单对台后进行封装,主要帮我们在微信支付那些事,生成请求XML及签名.解析XML.退款(请求需要双向证书),现在还新增扫码支付模式一模式二及网页测试等.在使用的过程你需要做事情是修改公众号ID.商户号.商户API密钥以及服务号授权URL配置等就可以测试.可以让你在微信支付中少走弯路. 里面有文档,代码,测试deom,jar包等. 下载地址:http://download.csdn.net/detail/u01114

微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口

用户扫码支付成功,微信异步回调商户 上一篇博客完成用户扫码支付功能: https://www.cnblogs.com/qdhxhz/p/9708534.html 当用户扫码支付成功之后,微信会异步回调商户接口,告知用户支付成功.好让商户进行下一步操作. 一.接口说明 1.流程图 这里要做的就是用户支付成功后,微信异步通知商户支付结果,商户收到通知后告知支付通知接收情况. 2.接口说明 有关商户接口应注意以下几点: (1)该链接是通过[统一下单API]中提交的参数notify_url设置,如果链接

Net MVC微信扫码支付

微信扫码支付+Asp.Net MVC 这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号ID(appid)’,‘商户号(mch_id)’和’商户支付密钥(KEY)‘,所以首先要有一个审核过的公众号,并开通支付功能,然后申请商户,通过审核后得到商户号,也就是商户平台的登录名.商户支付密钥是用来签名的,确保url不被篡改.进入商户平台后在API安全中设置,是一个32位的字符

微信支付—— 扫码支付

个人认为扫码支付比Jsapi支付从开发和使用上要顺心的多.扫码支付不用担心是PC端还是移动浏览器还是微信客户端访问的问题,生成一个二维码,扫描支付即可. 一些配置和代码SDK以及SDK存在的错误可以参考上一篇 微信支付的文章 http://blog.csdn.net/m0sh1/article/details/45199711 友情提示以下内容实在简陋 - -# 如果你跑通了 Jsapi支付,那么扫码支付其实没什么太特别的. 扫码支付发起支付的文件在 example SDK 中的 native.

微信支付公的众号支付和扫码支付

公众号支付是手机端的微信公众号H5页面支付,这种支付方式必须是在微信内置浏览器发起. 扫码支付分为模式一和模式二,模式一主要为线下服务,该模式是先扫码,再生成订单,商户先为自己的商品生成二维码连接,然后用户扫码之后决定是否购买,二维码无过期时间,比如自动售卖机大多采用这种模式:模式二主要为线上电商服务,用户选择商品后生成订单,根据订单生成二维码,然后支付,该二维码为临时二维码. 开发流程 一.授权目录 官方文档说必须是精确目录,其实是二级或三级目录就可以了,太精确的可能还会出现不识别的情况.如果

谈谈扫码支付的实现流程

平常我们在购物付款时,使用手机中的微信或支付宝扫一扫即可完成支付,无需像以前携带现金等着商户找零钱.线下扫码支付大大的提高了我们付款的效率,今天就主要谈一谈扫码支付的实现流程,让我们享受快捷的同时,也了解其中的原理. 二维码--信息的载体 说起扫码支付,就不得不提二维码.线下所有的扫码支付都是以扫二维码开始,通过扫描二维码,我们可以看到付款页面商家的名称,所以二维码在这里承担的角色是--信息的载体,它通过黑白相间的排列组合记录信息.不止是支付,我们看到很多APP的下载链接,也是用二维码的形式记录

通过集成扫码支付系统一键接入微信、支付宝钱包支付视频教程

管理软件如何对接扫码支付平台并能够自动识别微信支付和支付宝支付,通过对该课程的学习,可以让商户老板和软件安装人员能够熟悉操作流程和设置方法,以达到管理软件能够自动识别微信支付和支付宝支付的目的. 免费学习视频地址 原文地址:http://blog.51cto.com/13172026/2166046

JAVA微信扫码支付模式二功能实现以及回调

一.准备工作 首先吐槽一下微信关于支付这块,本身支持的支付模式就好几种,但是官方文档特别零散,连像样的JAVA相关的demo也没几个.本人之前没有搞过微信支付,一开始真是被它搞晕,折腾两天终于调通了,特此写下来,以享后人吧! 关于准备工作,就"微信扫码支付模式二"官方文档地址在这 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 可以先看看,实际上需要准备的东西有以下几个: 其中APP_ID和APP_SECRET

微信:微信扫码支付、调用统一下单接口、网站支付 + springmvc

一.场景:公司需要在网站上进行微信支付. 二.API:使用微信开放平台的接入微信支付 -扫码支付.微信支付开发者平台链接 三.分析: 接入扫码支付(包含PC网站支付)包含三个阶段,问这里只讲使用,也就是第2阶段的<启动设计和开发>. 点击查看开发者文档(扫码支付)后,这里感觉微信的文档没有支付宝好理解(稍微吐槽下~~~),不过我们忽略一切,直接进入模式二:模式二最简单直接,不需要在商户后台进行配置,推荐大家使用,微信也说流程更为简单,我这里也讲的是模式二,模式一大家有兴趣可以自行研究下. 如上