EsayWechat+微信小程序支付开发的流程总结

naixiaoxin/think-wechat

基于EsayWechat开发的用于thinkphp框架的拓展包《EsayWechat微信支付文档》

1、开始配置

use Naixiaoxin\ThinkWechat\Facade;

$config = [
    // 必要配置
    'app_id'             => 'xxxx',//公众号AppID或小程序AppID,看支付场景
    'mch_id'             => 'your-mch-id',//商户号
    'key'                => 'key-for-signature',   // API 密钥

    // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
    'cert_path'          => 'path/to/your/cert.pem', // XXX: 绝对路径!!!!
    'key_path'           => 'path/to/your/key',      // XXX: 绝对路径!!!!

    'notify_url'         => '默认的订单回调地址',     // 你也可以在下单时单独设置来想覆盖它
];

$payment= Factory::payment($config);

上面的配置信息,在安装完成扩展包之后会,可在Config/wechat.php配置文件中配置

2.统一下单(文档链接)

参数 appidmch_idnonce_strsignsign_type 可不用传入

$result = $payment->order->unify([
    'body' => '腾讯充值中心-QQ会员充值',
    'out_trade_no' => '20150806125346',
    'total_fee' => 88,
    'spbill_create_ip' => '123.12.12.123', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
    'notify_url' => 'https://pay.weixin.qq.com/wxpay/pay.action', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
    'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
    'openid' => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',
]);

3.生成小程序调取支付需要的参数

JSSDK 模块用于生成调起微信支付以及共享收货地址的调用所需的配置参数(文档链接)


$jssdk = $payment->jssdk;

$config = $jssdk->bridgeConfig($prepayId, false); // 返回数组

4.处理支付回调通知(文档链接)

      $response = $payment->handlePaidNotify(function ( $result , $fail ) {
            Log::write($result);//微信回调通知返回数据在$result
            //支付成功
            if ($result['result_code'] === 'SUCCESS') {
                $orderNO = $result['out_trade_no'];
                Db::startTrans();
                try {
                    $order = OrderModel::where('order_no' , '=' , $orderNO)->find();
                    //订单状态是未支付的才处理
                    if ($order['status'] == 1) {
                        $stockStatus = ( new OrderService() )->chenkOrderStock($order->id);
                        if ($stockStatus['pass']) {
                            $this->updateOrderStatus($order->id , true);
                            $this->reduceStock($stockStatus);
                        } else {
                            $this->updateOrderStatus($order->id , false);
                        }
                    }
                    Db::commit();
                    return true;
                } catch ( Exception $e ) {
                    Db::rollback();
                    Log::write($e);
                    return $fail('服务器处理失败,请稍后再通知我');//服务器处理出现异常需要返回给微信false,让他再次发起通知
                }
            //支付失败
            } else if ($result['result_code'] === 'FAIL') {
                //支付失败也需要返回true,表示服务器已处理,不然微信会反复通知,没有意义
                return true;
            }
        });

        $response->send();

注意:1.微信支付回调notify_url地址必须是真实服务器并且通过备案域名;通过ngrok可以本地开发调试统一下单、微信支付,小程序端能收到微信支付成功通知,但是服务器端,微信没有回调通知地址,导致无法处理后续流程,目前不确定是否微信限制,项目在真实服务器,支付回调正常;

转载于:https://my.oschina.net/u/4094683/blog/3064687

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值