您当前的位置:首页 > 网站建设笔记 >

虚拟商品自动发货系统网站会员充值

0
账户充值
间隔检测付款状况
选择支付宝(新版)
支付宝异步通知
支付宝同步通知
选择微信支付
微信支付结果通知

账户充值

充值卡 sl_rcard 表的结构
名字类型整理属性默认额外注释
R_idint(10)UNSIGNEDAUTO_INCREMENT充值卡自增ID
R_contenttextutf8_general_ciNULL充值卡号
R_moneydecimal(10,2)0.00充值卡面额
R_useint(10)0使用状态,0未使用,1已使用
R_midint(10)0使用者
R_delint(10)0是否删除,1删除
R_timedatetimeNULL充值卡生成时间
R_usetimedatetimeNULL充值卡使用时间
R_typeint(11)0充值卡类型,0充值卡,1VIP卡
资金/积分明细表 sl_lists 表的结构
名字类型整理属性默认额外注释
L_idint(11)AUTO_INCREMENT
L_midint(11)0会员ID
L_notextutf8_general_ci资金编号
L_no2varchar(200)utf8_general_ciNULL
L_titletextutf8_general_ci明细名称
L_genkeytextutf8_general_ci随机字符串
L_moneydecimal(10,2)0.00资金金额
L_delint(11)0
L_shint(11)10未审核,1审核已通过,2审核未通过
L_typeint(11)00代表资金,1代表积分
L_timedatetime
会员表 sl_member 表的结构
名字类型整理属性默认额外注释
M_idint(11)AUTO_INCREMENT会员ID
M_fromint(11)0上级ID
M_logintextutf8_general_ci会员登录用户名
M_pwdtextutf8_general_ci经过MD5加密的会员密码
M_pwdcodetextutf8_general_ci随机字符串
M_headtextutf8_general_ci会员头像(存放在media文件夹)
M_emailtextutf8_general_ci会员邮箱
M_openidtextutf8_general_ciQQ快捷登录绑定的openid
M_wxidvarchar(200)utf8_general_ciNULL微信快捷登录绑定的openid
M_regtimedatetime会员注册时间
M_typeint(11)0类型(0普通会员、1商户)
M_delint(11)0是否已删除
M_viptimedatetime1970-01-01 00:00:00开通VIP的时间
M_viplongint(11)0开通VIP的时长
M_moneydecimal(10,2)0.00账户余额
M_fenint(11)0账户积分
M_shopvarchar(200)utf8_general_ciNULL店铺名称
M_sellertimedatetimeNULL开通商户的时间
M_sellerlongint(11)0开通商户的时长
M_noticevarchar(500)utf8_general_ciNULL店铺公告
M_mobilevarchar(200)utf8_general_ciNULL手机号码
M_qqvarchar(200)utf8_general_ciNULL
M_webtitlevarchar(200)utf8_general_ciNULL
M_keywordvarchar(200)utf8_general_ciNULL
M_descriptionvarchar(500)utf8_general_ciNULL
M_logovarchar(200)utf8_general_ciNULL
M_icovarchar(200)utf8_general_ciNULL
M_domainvarchar(200)utf8_general_ciNULL
M_beianvarchar(200)utf8_general_ciNULL
M_copyrightvarchar(500)utf8_general_ciNULL
M_qrcodevarchar(500)utf8_general_ciNULL
M_contactvarchar(1000)utf8_general_ciNULL
M_kefuvarchar(1000)utf8_general_ciNULL
M_codevarchar(5000)utf8_general_ciNULL
M_templatevarchar(200)utf8_general_ciNULL
M_wapvarchar(200)utf8_general_ciNULL
M_priceupint(11)0
M_showint(11)0
M_stopint(11)0帐号是否封停
M_stopinfovarchar(500)utf8_general_ciNULL帐号封停原因
M_productvarchar(2000)utf8_general_ciNULL
M_newsvarchar(2000)utf8_general_ciNULL
M_postagedecimal(10,2)0.00
M_baoyoudecimal(10,2)0.00
M_bonddecimal(10,2)0.00
M_downloadtimesint(11)0
M_freetimedatetimeNULL
M_lastlogintimedatetime1970-01-01 00:00:00
会员充值页面

查询sl_list资金积分数据表里面的记录,如果表里存在L_genkey(提交充值时生成的随机字符串,由异步通知notify_url.php文件处理),说明用户已经付款成功,则跳转到用户资金积分明细页面。

名称资金编号时间审核
帐号充值+60.00元20231027220014437105012338772023-10-27 17:53:03已通过
余额提现(13******567/伍六七/实际到账:90元/手续费:10元)-100.00元20231027173648901602682023-10-27 17:36:48已通过
积分转余额+0.01元20231027173548803705362023-10-27 17:35:48已通过
帐号充值+100.00元20231027220014437105012308112023-10-27 17:35:18已通过
开通VIP会员1个月-10.00元20231027173325398047592023-10-27 17:33:25已通过
帐号充值+10.00元20231027220014437105012349642023-10-27 16:15:21已通过
javascript间隔检测付款状况

支付宝手机网站支付流程手机截图

支付宝手机网站支付流程手机截图

支付宝支付

异步通知返回参数

交易支付成功后,在sl_list表插入数据记录
L_id L_mid
会员ID
L_no
资金编号
L_title
明细名称
L_money
资金金额
L_del L_time L_genkey
随机字符串
L_sh
0未审核
1审核已通过
2审核未通过
L_no2 L_type
0代表资金
1代表积分
46162023102722001443710501233877帐号充值60.0002023-10-27 17:53:03ujgNnExcYuqLbthQF42J1NULL0

异步通知业务处理代码

支付宝同步通知详细说明

以下设置的支付宝同步通知return_url页面的内部处理逻辑代码也太简陋了!虽然根据支付宝官方文档介绍:return_url 为同步跳转地址,可实现支付成功后跳转到商家页面的功能。但也明确了注意事项:由于同步通知中不含有 trade_status(交易状态),无法确认交易信息,建议根据异步通知或交易查询接口返回的 trade_status(交易状态)为准。

支付宝同步通知

微信H5支付流程手机截图

微信H5支付流程手机截图

统一下单

应用场景

除付款码支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按Native、JSAPI、APP等不同场景生成交易串调起支付。

接口链接

URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

URL地址:https://api2.mch.weixin.qq.com/pay/unifiedorder(备用域名)见跨城冗灾方案

是否需要证书

请求参数

字段名变量名必填类型示例值描述
公众账号IDappidString(32)wxd678efh567hg6787微信支付分配的公众账号ID(企业号corpid即为此appid)
附加数据attachString(127)深圳分店附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。
商品描述bodyString(127)腾讯充值中心-QQ会员充值商品简单描述,该字段请按照规范传递,具体请见参数规定
商户号mch_idString(32)微信支付分配的商户号
随机字符串nonce_strString(32)随机字符串,长度要求在32位以内。
通知地址notify_urlString(256)body异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。公网域名必须为https,如果是走专线接入,使用专线NAT IP或者私有回调域名可使用http
商户订单号out_trade_noString(32)商户系统内部订单号,要求32个字符内(最少6个字符),只能是数字、大小写字母_-|*且在同一个商户号下唯一。
终端IPspbill_create_ipString(64)支持IPV4和IPV6两种格式的IP地址。用户的客户端IP
标价金额total_feeint订单总金额,单位为分
交易类型trade_typeString(16)JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付,不同trade_type决定了调起支付的方式,请根据支付产品正确上传
MICROPAY--付款码支付,付款码支付有单独的支付接口,所以接口不需要上传,该字段在对账单中会出现
场景信息
H5支付请求参数
scene_infoString(256)

//IOS移动应用

{"h5_info":{"type":"IOS","app_name":"王者荣耀","bundle_id":"com.tencent.wzryIOS"}}

//安卓移动应用

{"h5_info":{"type":"Android","app_name":"王者荣耀","package_name":"com.tencent.tmgp.sgame"}}

//WAP网站应用

{"h5_info":{"type":"Wap","wap_url":"https://pay.qq.com","wap_name":"腾讯充值"}}

//门店信息

{"store_info":{"id":"SZTX001","name":"腾大餐厅","area_code":"440305","address":"科技园中一路腾讯大厦"}}

该字段用于上报支付的场景信息,针对H5支付有以下三种场景,请根据对应场景上报,H5支付不建议在APP端使用,针对场景1、2请接入APP支付,不然可能会出现兼容性问题。

1、IOS移动应用

{"h5_info":{
  "type": "IOS", //场景类型
  "app_name": "王者荣耀", //应用名
  "bundle_id": "com.tencent.wzryIOS" //bundle_id
}}

2、安卓移动应用

{"h5_info":{
  "type": "Android", //场景类型
  "app_name": "王者荣耀", //应用名
  "bundle_id": "com.tencent.tmgp.sgame" //包名
}}

3、WAP网站应用

{"h5_info":{
  "type": "Wap", //场景类型
  "wap_url": "https://pay.qq.com", //WAP网站URL地址
  "wap_name": "腾讯充值" //WAP网站名
}}

4、门店信息

{"store_info":{
  "id": "SZTX001", //门店ID
  "name": "腾大餐厅", //门店名称
  "area_code": "440305", //门店所在地行政区划码,详细见《最新县及县以上行政区划代码》
  "address": "科技园中一路腾讯大厦" //门店地址
}}
签名signString(32)通过签名算法计算得出的签名值,详见签名生成算法
签名类型sign_typeString(32)MD5签名类型,默认为MD5,支持HMAC-SHA256和MD5。
设备号device_infoString(32)013467007045764自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传WEB
商品IDproduct_idString(32)trade_type=NATIVE时,此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
商品详情detailString(6000)商品详细描述,对于使用单品优惠的商户,该字段必须按照规范上传,详见单品优惠参数说明
用户标识openidString(128)trade_type=JSAPI时(即JSAPI支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换
标价币种fee_typeString(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,境内商户号仅支持人民币
交易起始时间time_startString(14)20091225091010订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。
交易结束时间time_expireString(14)20091227091010订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。
订单优惠标记goods_tagString(32)WXG订单优惠标记,使用代金券或立减优惠功能时需要的参数
指定支付方式limit_payString(32)no_credit上传此参数no_credit--可限制用户不能使用信用卡支付
电子发票入口开放标识receiptString(8)YY,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效
是否需要分账profit_sharingString(16)YY-是,需要分账
N-否,不分账
字母要求大写,不传默认不分账
场景信息scene_infoString(256)
{
  "store_info": {
    "id": "SZTX001",
    "name": "腾大餐厅",
    "area_code": "440305",
    "address": "科技园中一路腾讯大厦"
  }
}
该字段常用于线下活动时的场景信息上报,支持上报实际门店信息,商户也可以按需求自己上报相关信息。该字段为JSON对象数据,对象格式为{"store_info":{"id":"门店ID","name":"名称","area_code":"编码","address":"地址"}}
门店ididString(32)SZTX001门店编号,由商户自定义
门店名称nameString(64)腾讯大厦腾大餐厅门店名称,由商户自定义
门店行政区划码area_codeString(6)440305门店所在地行政区划码,详细见《最新县及县以上行政区划代码》
门店详细地址addressString(128)科技园中一路腾讯大厦门店详细地址 ,由商户自定义

微信支付统一下单

返回结果

字段名变量名必填类型示例值描述
返回状态码return_codeString(16)SUCCESSSUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息return_msgString(128)OK当return_code为FAIL时返回信息为错误原因,例如:签名失败、参数格式校验错误

以下字段在return_code为SUCCESS的时候有返回

字段名变量名必填类型示例值描述
公众账号IDappidString(32)调用接口提交的公众账号ID
商户号mch_idString(32)调用接口提交的商户号
设备号device_infoString(32)自定义参数,可以为请求支付的终端设备号等
随机字符串nonce_strString(32)微信返回的随机字符串
签名signString(32)微信返回的签名值
业务结果result_codeString(16)SUCCESSSUCCESS/FAIL
错误代码err_codeString(32)SYSTEMERROR当result_code为FAIL时返回错误代码,详细参见下文错误列表
错误代码描述err_code_desString(128)系统错误当result_code为FAIL时返回错误描述,详细参见下文错误列表

以下字段在return_code和result_code都为SUCCESS的时候有返回

字段名变量名必填类型示例值描述
交易类型trade_typeString(16)JSAPI调用接口提交的交易类型,取值如下:
JSAPI--JSAPI支付
NATIVE--Native支付
APP--APP支付
MWEB--H5支付
预支付交易会话标识prepay_idString(64)微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时,针对H5支付此参数无特殊用途
二维码链接code_urlString(64)trade_type=NATIVE时有返回,此url用于生成支付二维码,然后提供给用户进行扫码支付。
注意:code_url的值并非固定,使用时按照URL格式转成二维码即可。时效性为2小时
支付跳转链接mweb_urlString(64)mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。

支付结果通知

应用场景

支付完成后,微信会把相关支付结果及用户信息通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。

注意:

1、同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

2、后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,微信总共会发起多次通知,通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h-总计24h4m)这里通知发送可能会多台服务器进行发送,且发送时间可能会在几秒内,但微信不保证通知最终一定能成功。

3、在订单状态不明或者没有收到微信支付结果通知的情况下,建议商户主动调用微信支付【查询订单API】确认订单状态。

特别提醒:

1、商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄露导致出现“假通知”,造成资金损失。

2、当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

接口链接

该链接是通过【统一下单API】中提交的参数notify_url设置,如果链接无法访问,商户将无法接收到微信通知。

通知url必须为直接可访问的url,不能携带参数。公网域名必须为https,如果是走专线接入,使用专线NAT IP或者私有回调域名可使用http。

是否需要证书

不需要。

通知参数

字段名变量名必填类型示例值描述
返回状态码return_codeString(16)SUCCESSSUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息return_msgString(128)签名失败返回信息,如非空,为错误原因
签名失败
参数格式校验错误

以下字段在return_code为SUCCESS的时候有返回

字段名变量名必填类型示例值描述
小程序IDappidString(32)微信分配的小程序ID
商户号mch_idString(32)微信支付分配的商户号
设备号device_infoString(32)微信支付分配的终端设备号
随机字符串nonce_strString(32)随机字符串,不长于32位
签名signString(32)签名,详见签名算法
签名类型sign_typeString(32)HMAC-SHA256签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
业务结果result_codeString(16)SUCCESSSUCCESS/FAIL
错误代码err_codeString(32)SYSTEMERROR错误返回的信息描述
错误代码描述err_code_desString(128)系统错误错误返回的信息描述
用户标识openidString(128)用户在商户appid下的唯一标识
是否关注公众账号is_subscribeString(1)Y用户是否关注公众账号,Y关注,N未关注
交易类型trade_typeString(16)JSAPIJSAPI、NATIVE、APP
付款银行bank_typeString(32)CMC银行类型,采用字符串类型的银行标识,银行类型见银行列表
订单金额total_feeint100订单总金额,单位为分
应结订单金额settlement_total_feeint100应结订单金额=订单金额-非充值代金券金额,应结订单金额≤订单金额。
货币种类fee_typeString(8)CNY货币类型,符合ISO4217标准的三位字母代码,默认人民币CNY,其他值列表详见货币类型
现金支付金额cash_feeint100现金支付金额订单现金支付金额,详见支付金额
现金支付货币类型cash_fee_typeString(16)CNY货币类型,符合ISO4217标准的三位字母代码,默认人民币CNY,其他值列表详见货币类型
总代金券金额coupon_feeint10代金券金额≤订单金额,订单金额-代金券金额=现金支付金额,详见支付金额
代金券使用数量coupon_countint1代金券使用数量
代金券类型coupon_type_$nStringCASH CASH-充值代金券
NO_CASH-非充值代金券
并且订单使用了免充值券后有返回(取值:CASH、NO_CASH)。$n为下标,该笔订单使用多张代金券时,从0开始编号,举例:coupon_type_0、coupon_type_1
注意:只有下单时订单使用了优惠,回调通知才会返回券信息。下列情况可能导致订单不可以享受优惠:可能情况
代金券IDcoupon_id_$nString(20)10000代金券ID,$n为下标,该笔订单使用多张代金券时,从0开始编号,举例:coupon_id_0、coupon_id_1
注意:只有下单时订单使用了优惠,回调通知才会返回券信息。下列情况可能导致订单不可以享受优惠:可能情况
单个代金券支付金额coupon_fee_$nint100单个代金券支付金额,$n为下标,从0开始编号
微信支付订单号transaction_idString(32)微信支付订单号
商户订单号out_trade_noString(32)商户系统内部订单号,要求32个字符内(最少6个字符),只能是数字、大小写字母、下划线_、中划线-、竖线|、星号*这些英文半角字符的组合且在同一个商户号下唯一。详见商户订单号
商家数据包attachString(128)商家数据包,原样返回
支付完成时间time_endString(14)20141030133525支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
微信支付结果通知参数:
{
  "appid":"wxddaae***********",
  "attach":"106",
  "bank_type":"OTHERS",
  "cash_fee":"1",
  "fee_type":"CNY",
  "is_subscribe":"N",
  "mch_id":"153*******",
  "nonce_str":"vqn8zym1wera0oluufohj0jefwgtqbza",
  "openid":"ovMqs1b75qP2_fhT5IG0H3coBDQY",
  "out_trade_no":"FA24506531123443",
  "result_code":"SUCCESS",
  "return_code":"SUCCESS",
  "sign":"65469839FB1C3B42B063EE71E586DC0A",
  "time_end":"20231024203104",
  "total_fee":"1",
  "trade_type":"MWEB",
  "transaction_id":"4200002053202310247589379060"
}

微信支付结果通知处理代码

以上支付结果通知处理逻辑代码有以下几个问题:

1、商户系统对于支付结果通知的内容只做了签名验证,没有校验返回的订单金额是否与商户侧的订单金额是否一致;

2、在V2接口中,支付结果通知中的返回状态码(return_code)和业务结果(result_code)这两个参数的值都为SUCCESS时,是否说明支付成功了?也就是说,如果return_code=SUCCESS,result_code=SUCCESS时,是不是就不需要调用『查询订单』接口?

返回参数

商户处理后同步返回给微信参数:

字段名变量名必填类型示例值描述
返回状态码return_codeString(16)SUCCESSSUCCESS/FAIL
SUCCESS表示商户接收通知成功并校验成功
返回信息return_msgString(128)OK 返回信息,如非空,为错误原因:
签名失败
参数格式校验错误

举例如下:

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>

建站咨询

咨询热线

微信咨询

返回顶部