雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

EasyWechat 4.x JSAPI 微信支付

2024-09-15 31

1. 前言


公众号网页中调起微信支付,常用的支付类型就是 JSAPI

准备工作:

1、公众号:APPID、配置网页授权域名(设置与开发-公众号设置-网页授权域名)
2、微信商户号:关联公众号,商户号ID、商户API密钥、JSAPI支付授权目录

补充:微信支付不需要商户证书文件,在企业付款到零钱、退款等敏感操作才使用到证书

安装 easywechat 4.x 版本,PHP版本要求 7.0.+

composer require overtrue/wechat:~4.0

2. 获取微信支付实例


微信支付配置:https://easywechat.com/docs/4.x/payment/index

use EasyWeChat\Factory;$config = [    // 支付所需配置    'app_id'     => 'xxxx',//公众号APPID    'mch_id'     => 'your-mch-id',//商户号ID    'key'        => 'key-for-signature',// 商户号API 密钥    'notify_url' => '默认的订单回调地址',// 你也可以在下单时单独设置来想覆盖它];$app = Factory::payment($config);

3. 统一下单,生成预支付交易单


统一下单:https://easywechat.com/docs/4.x/payment/order

JSAPI 支付官方开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

$result = $app->order->unify([    'body'         => '腾讯充值中心-QQ会员充值',//商品名称    'out_trade_no' => '20150806125346', // 商家订单号(自己生成随机订单号)    'total_fee'    => 88, // 支付金额,单位:分    'notify_url'   => 'https://pay.weixin.qq.com/wxpay/pay.action', // 支付结果通知网址    'trade_type'   => 'JSAPI', // 请对应换成你的支付方式对应的值类型    'openid'       => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',]);if (isset($result['result_code']) && $result['result_code'] === 'SUCCESS') {    // 预支付交易单生成成功    $prepayId = $result['prepay_id'];} else {    // 预支付交易单生成失败}

返回结果示例:预支付交易单生成成功

[    "return_code" => "SUCCESS"    "return_msg"  => "OK"    "result_code" => "SUCCESS"    "mch_id"      => "1491118112"    "appid"       => "wx4f54d5e8808e0b5e"    "nonce_str"   => "PZ9DbpDDTjlan3rQ"    "sign"        => "C3CBC4D8D94D310C0DA5B31BA3C20E69"    "prepay_id"   => "wx191119031406819681e5d74f3761470000"    "trade_type"  => "JSAPI"]

预支付交易单生成失败

[    "return_code"  => "SUCCESS"    "return_msg"   => "OK"    "result_code"  => "FAIL"    "err_code_des" => "无效的openid"    "err_code"     => "PARAM_ERROR"    "mch_id"       => "1491118112"    "appid"        => "wx4f54d5e8808e0b5e"    "nonce_str"    => "20GD48pP9GlPJVSt"    "sign"         => "782E4BE6B6559ECE250689E65A7BB935"]

4. 生成支付 JS 配置


生成支付 JS 配置(三种发起方式):https://easywechat.com/docs/4.x/payment/jssdk

WeixinJSBridge.invoke() 为例

$json = $jssdk->bridgeConfig($prepayId);

$json 是一个json字符串,示例值如下

{    "appId": "wx4f54d5e8808e0b5e",    "timeStamp": "1624082215",    "nonceStr": "60cd87271f9dc",    "package": "prepay_id=wx191356511785218014f91263552d430000",    "signType": "MD5",    "paySign": "9A06CA325371AA7EC627BEFF34AA0325"}
更新于:2个月前
赞一波!

文章评论

评论问答