>支付使用场景:当有用户使用了支付,并且支付成功的时候,会触发该钩子的碎片,支付包括(充值,购买会员会员组,购买产品等),只要涉及到支付都会触发支付碎片 | 标题 | 名称 | 钩子描述 | | --- | --- | --- | | 支付 | pay| 当有用户使用了支付,并且支付成功的时候,会触发该钩子的碎片 ``` function functionName($type,$payType,$userInfo,$data) ``` >[info]$type 支付种类 WX:微信支付,Alipay:支付宝支付,Balance:余额支付 $payType 支付方式 JSAPI、NATIVE、APP ,MICROPAY,MWEB,注意:余额支付只有SYSTEM $userInfo 支付会员信息 请到会员碎片[查看](1230254) $data 支付返回的信息 >$payType 支付方式 | 支付标识 | 支付类型 | | --- | --- | | JSAPI | JSAPI支付方式是在微信或者支付包浏览器中支付的一种方式 | | NATIVE | NATIVE 扫描支付方式,点击支付生成二维码,然后扫码支付 | | APP | APP APP中支付方式 | | MICROPAY | MICROPAY 商家柜台扫描,客户展示自己的收付款码,商家用扫描设备进行扫描支付| | MWEB | MWEB H5支付,在特定浏览器以外的环境上支付,比如从手机平板的浏览器上进行支付| >[info]$type为【Balance】(余额支付) $data( 数组 )返回的数据 变量名 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | total\_fee | Int | 100 | 订单总金额,单位为分 | out\_trade\_no | String(32) | 1212321211201407033568112322 | cowcms系统中产生的订单号,此次支付的订单号,根据该号修改订单状态| attach | String(128) | 123456 | 发起支付时带的参数,支付完成原样返回,识别是充值支付还是购买产品支付 | >[info]$type为【WX】(微信支付) $data( 数组 )返回的数据 变量名 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | openid | String(128) | wxd930ea5d5a258f4f | 支付用户所对应的微信openid | total\_fee | Int | 100 | 订单总金额,单位为分 | transaction\_id |String(32) | 1217752501201407033233368018 | 微信支付订单号 | out\_trade\_no | String(32) | 1212321211201407033568112322 | cowcms系统中产生的订单号,此次支付的订单号,根据该号修改订单状态| attach | String(128) | 123456 | 发起支付时带的参数,支付完成原样返回,识别是充值支付还是购买产品支付 | time\_end | String(14) | 20141030133525 | 支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010 | appid | String(32) | wx8888888888888888 | 微信分配的公众账号ID(企业号corpid即为此appId) | mch\_id | String(32) | 1900000109 | 微信支付分配的商户号 | nonce\_str | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串,不长于32位,在支付的时候传入的随机数 | sign | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 支付签名值| is\_subscribe | String(1) | 关注为Y,未关注为N | 支付用户是否关注了 appid对应的公众号 | trade\_type | String(16) | JSAPI- NATIVE-APP-MICROPAY| 支付类型 | bank\_type | String(16) | CFT | 银行类型,采用字符串类型的银行标识,银行类型见[银行列表](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2) | fee\_type |String(8) | CNY | 支付货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见[货币类型](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2) | cash\_fee | Int | 100 | 现金支付金额订单现金支付金额,详见[支付金额](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2) | >微信返回数据 ``` array(20) { ["appid"] => string(18) "wxc0d7ec4863c12ab9" ["attach"] => string(8) "recharge" ["bank_type"] => string(3) "CFT" ["cash_fee"] => string(1) "1" ["fee_type"] => string(3) "CNY" ["is_subscribe"] => string(1) "N" ["mch_id"] => string(10) "1225084602" ["nonce_str"] => string(16) "KaqrYV88aB1VXkpz" ["openid"] => string(28) "o4KFnuLOwsQR9tDusUk0ZBhe5b4Q" ["out_trade_no"] => string(21) "cowcms_20190528192231" ["result_code"] => string(7) "SUCCESS" ["return_code"] => string(7) "SUCCESS" ["return_msg"] => string(2) "OK" ["sign"] => string(64) "558D972A61DA690C172E0F19BE14EEAA85BAEF738AD07C78FDE69F67615966BF" ["time_end"] => string(14) "20190528192532" ["total_fee"] => string(1) "1" ["trade_state"] => string(7) "SUCCESS" ["trade_state_desc"] => string(12) "支付成功" ["trade_type"] => string(6) "NATIVE" ["transaction_id"] => string(28) "4200000295201905289397268000" } ``` >[info]$type为【Alipay】(支付宝支付) $data( 数组 )返回的数据 >[danger]注意以下是支付宝支付完成返回的数据,其中第一个表是为了和微信支付统一数据返回的数据,第二个表为支付宝返回的数据,2个表的数据都包含在$data变量中,其中第一个表参数字段中 括号中的名称为支付宝对应的字段,如 openid (buyer\_id),表示openid对应的为第二个表中的buyer\_id的值 | 参数 | 类型 | 描述 | 范例 | | --- | --- | --- | --- | openid (buyer_id)| String(16) | 2088102122524333| 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字 | total\_fee(total_amount)| Int | 100 | 订单总金额,单位为分,注意 total_amount单位为元 | transaction\_id (trade_no)|String(64) | 2013112011001004330000121536 |支付宝交易订单号 | out\_trade\_no | String(32) | 1212321211201407033568112322 | cowcms系统中产生的订单号,此次支付的订单号,根据该号修改订单状态| attach(passback_params) | String(128) | 123456 | 发起支付时带的参数,支付完成原样返回,识别是充值支付还是购买产品支付 | time\_end (gmt_payment)| String(14) | 20141030133525 | 支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010 | appid (app_id)| String(32) | 2014072300007148 |支付宝分配给开发者的应用Id | trade\_type | String(16) | JSAPI- NATIVE-APP-MICROPAY| 支付类型 | | 参数 | 类型 | 描述 | 范例 | | --- | --- | --- | --- | | trade\_no | String(64) | 支付宝交易号,和商户订单号不能同时为空| 2013112011001004330000121536 | | app\_id | String(32) | 支付宝分配给开发者的应用Id | 2014072300007148 | | out\_biz\_no | String(64) | 商户业务ID,主要是退款通知中返回退款申请的流水号 | HZRF001 | | buyer\_id | String(16) | 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字 | 2088102122524333 | | seller\_id | String(30) | 卖家支付宝用户号 | 2088101106499364 | | trade\_status | String(32) | 交易目前所处的状态,见[交易状态说明](https://docs.open.alipay.com/#s1) | TRADE\_CLOSED | | total\_amount | Number(9,2) |本次交易支付的订单金额,单位为人民币(元),精确到小数点后2位 | 20.00 | | receipt\_amount | Number(9,2) | 商家在交易中实际收到的款项,单位为元,精确到小数点后2位 | 15.00 | | invoice\_amount | Number(9,2) | 用户在交易中支付的可开发票的金额,单位为元,精确到小数点后2位 | 10.00 | | buyer\_pay\_amount | Number(9,2) | 用户在交易中支付的金额,单位为元,精确到小数点后2位 | 13.88 | | point\_amount | Number(9,2) | 使用集分宝支付的金额,单位为元,精确到小数点后2位 | 12.00 | | refund\_fee | Number(9,2) | 退款通知中,返回总退款金额,单位为元,精确到小数点后2位 | 2.58 | | subject | String(256) | 商品的标题/交易标题/订单标题/订单关键字等,是请求时对应的参数,原样通知回来 | 当面付交易 | | body | String(400) | 该订单的备注、描述、明细等。对应请求时的body参数,原样通知回来 | 当面付交易内容 | | gmt\_create | Date | 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss | 2015-04-27 15:45:57 | | gmt\_payment | Date | 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss | 2015-04-27 15:45:57 | | gmt\_refund | Date | 该笔交易的退款时间。格式为yyyy-MM-dd HH:mm:ss.S | 2015-04-28 15:45:57.320 | | gmt\_close | Date | 该笔交易结束时间。格式为yyyy-MM-dd HH:mm:ss | 2015-04-29 15:45:57 | | fund\_bill\_list | String(512) | 支付成功的各个渠道金额信息,详见[资金明细信息说明](https://docs.open.alipay.com/#s3) | \[{“amount”:“15.00”,“fundChannel”:“ALIPAYACCOUNT”}\] | | voucher\_detail\_list | String(512) | 本交易支付时所使用的所有优惠券信息,详见[优惠券信息说明](https://docs.open.alipay.com/#s5) | \[{“amount”:“0.20”,“merchantContribute”:“0.00”,“name”:“一键创建券模板的券名称”,“otherContribute”:“0.20”,“type”:“ALIPAY\_DISCOUNT\_VOUCHER”,“memo”:“学生卡8折优惠”\] | | passback\_params | String(512) | 公共回传参数,如果请求时传递了该参数,则返回给商户时会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝 | merchantBizType%3d3C%26merchantBizNo%3d2016010101111 | **说明:**receipt\_amount、invoice\_amount、buyer\_pay\_amount、point\_amount、voucher\_detail\_list在用户使用优惠券时才会返回,其他情况请 >[info]注意:微信支付,支付宝支付,余额支付时,attach变量值的描述 充值格式:buyPiont_购买会员id_充值的积分类型_充值的积分数。 购买会员组格式 buyGroup__购买会员id_购买会员组id_购买时间戳_到期时间戳_测试到期时间戳。 购买产品格式 buyProduct_购买会员id_标识_购买产品id_购买数量(标识,product:产品,curriculum:课程,special:专栏,标识也可自行定义,到时在付款成功后的回调中返回)。 >支付宝返回数据示例 ``` Array ( [gmt_create] => 2019-05-31 10:14:09 [charset] => UTF-8 [subject] => 20190531101133 [sign] => YYg72u7V6sHvi8XyIuoqke0fhoHVnfdohMh/40ptDn3wwE+q23derIaq26Y2aSpg/R0Af+aezdRTyLNspM3gPeFGDSGLmQnZ8Uu1SXDRl0mCW/P/eCcnscyHcjpf8kV1splcolOxWSByNtHImu0GDMnwrCtHXZ/5nkm1b7Riqhj2RxGCYTfZ1zMCG4+f65vGJ+aRnLDETdwdjNTy8bZXt3mvrXt15lRtJKBExX3Nnjrf/7NFh2/ENRiiN9z7LyA+TcNlgvRA/+LuDaOKD798aVaAH4+B3VUtBauM/ONS+2xlveqnfnajM+ErXxvGS6kPoVbcHpJvb6N40eEYIsY80w== [buyer_id] => 2088102178846014 [body] => 11 [invoice_amount] => 0.01 [notify_id] => 2019053100222101431046011000258693 [fund_bill_list] => [{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}] [notify_type] => trade_status_sync [trade_status] => TRADE_SUCCESS [receipt_amount] => 0.01 [app_id] => 2016092900624069 [buyer_pay_amount] => 0.01 [sign_type] => RSA2 [seller_id] => 2088102177809380 [gmt_payment] => 2019-05-31 10:14:31 [notify_time] => 2019-05-31 10:14:32 [passback_params] => 11 [version] => 1.0 [out_trade_no] => cowcms_20190531101133 [total_amount] => 0.01 [trade_no] => 2019053122001446011000033320 [auth_app_id] => 2016092900624069 [point_amount] => 0.00 [openid] => 2088102178846014 [total_fee] => 1 [transaction_id] => 2019053122001446011000033320 [attach] => 11 [time_end] => 1559268871 [appid] => 2016092900624069 [trade_type] => NATIVE ) ``` >[danger]以上格式是系统预定义的格式,你也可以根据自己的需求定义其它格式的的数据,在支付时将自定义的格式传给attach变量值,然后在付款成功后的钩子中进行处理数据 ``` echo $data['attach']; //充值 buyPiont_1_money_100 表示id为1的用户充值money类型的积分100个 //购买会员组 buyGroup_1_2_1555555983_1555557983_0 表示id为1的用户购买id为2的会员组,购买时间 1555555983,到期时间1555557983 //购买产品 buyProduct_1_product_10_2 表示id为1的用户购买标识为product,id为10的产品2件 ```