Maison  >  Article  >  Applet WeChat  >  Utilisez EasyWechat pour développer rapidement le paiement par compte public WeChat

Utilisez EasyWechat pour développer rapidement le paiement par compte public WeChat

一个新手
一个新手original
2017-09-14 09:58:215310parcourir

Préparation anticipée :

Après avoir demandé le paiement WeChat, vous recevrez 2 paramètres, l'identifiant du commerçant et la clé du commerçant
Remarque. , ces deux paramètres ne doivent pas être confondus avec les paramètres WeChat
Paramètres WeChat : appid, appkey, token
Paramètres de paiement : Merchant_id (numéro du commerçant), clé (Paiement). clé)
Comment obtenir la clé de paiement ?
Allez sur https://pay.weixin.qq.com -->Centre de comptes--> Sécurité API-->Définir la clé API
Définissez vous-même une clé de 32 bits

Processus de paiement WeChat :

1. Composer installe le package EasyWechat

Exigences en matière d'environnement :

  • PHP >= 5.5. 9

  • Extension PHP cURL

  • Extension PHP OpenSSL

Installation :

composer require overtrue/wechat:~3.1 -vvv

2. Public Configuration du numéro

2.1, Configurer l'annuaire de paiement et le nom de domaine autorisé

2.2. Configurer l'autorisation de la page Web

3. Initialisez le SDK et créez une EasyWeChatFoundationApplication instance

<?php
use EasyWeChat\Foundation\Application;protected $app=null;public function construct(){   
$options = [   /**
     * Debug 模式,bool 值:true/false
     *
     * 当值为 false 时,所有的日志都不会记录     */
    &#39;debug&#39;  => true,    /**
     * 账号基本信息,请从微信公众平台/开放平台获取     */
    &#39;app_id&#39;  => &#39;your-app-id&#39;,         // AppID
    &#39;secret&#39;  => &#39;your-app-secret&#39;,     // AppSecret
    &#39;token&#39;   => &#39;your-token&#39;,          // Token
    &#39;aes_key&#39; => &#39;&#39;,                    // EncodingAESKey,安全模式下请一定要填写!!!

    /**
     * 日志配置
     *
     * level: 日志级别, 可选为:
     *         debug/info/notice/warning/error/critical/alert/emergency
     * permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)
     * file:日志文件位置(绝对路径!!!),要求可写权限     */
    &#39;log&#39; => [        &#39;level&#39;      => &#39;debug&#39;,
        &#39;permission&#39; => 0777,
        &#39;file&#39;       => &#39;/tmp/easywechat.log&#39;,
    ],    /**
     * OAuth 配置
     *
     * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
     * callback:OAuth授权完成后的回调页地址     */
    &#39;oauth&#39; => [        
            &#39;scopes&#39;   => [&#39;snsapi_userinfo&#39;],
        &#39;callback&#39; => &#39;/examples/oauth_callback.php&#39;,
    ],    /**
     * 微信支付     */
    &#39;payment&#39; => [        &#39;merchant_id&#39;        => &#39;your-mch-id&#39;,
        &#39;key&#39;                => &#39;key-for-signature&#39;,
        &#39;cert_path&#39;          => &#39;path/to/your/cert.pem&#39;, // XXX: 绝对路径!!!!
        &#39;key_path&#39;           => &#39;path/to/your/key&#39;,      // XXX: 绝对路径!!!!
        &#39;notify_url&#39;         => &#39;默认的订单回调地址&#39;,       // 你也可以在下单时单独设置来想覆盖它
        // &#39;device_info&#39;     => &#39;013467007045764&#39;,
        // &#39;sub_app_id&#39;      => &#39;&#39;,
        // &#39;sub_merchant_id&#39; => &#39;&#39;,
        // ...
    ],];$this->$app = new Application($options);
}

4. Récupérez l'objet de paiement payment

$payment =$this->$app->payment;

5. Passez la commande de l'objet de commande (numéro de commande, montant, openid) comme paramètres dans

<?phpuse EasyWeChat\Foundation\Application;use EasyWeChat\Payment\Order; 

$attributes = [ &#39;trade_type&#39; => &#39;JSAPI&#39;, // JSAPI,NATIVE,APP... &#39;body&#39; => &#39;iPad mini 16G 白色&#39;, &#39;detail&#39; => &#39;iPad mini 16G 白色&#39;,
&#39;out_trade_no&#39; => &#39;1217752501201407033233368018&#39;,//订单号 &#39;total_fee&#39; => 5388, // 单位:分 &#39;notify_url&#39; => &#39;http://xxx.com/order-notify&#39;, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 &#39;openid&#39; => &#39;当前用户的 openid&#39;, // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识, // ... ]; $order = new Order($attributes);

6. Prétraitez et obtenez un identifiant de pré-traitement, paiement->préparer(commande);

$result = $payment->prepare($order);
if ($result->return_code == &#39;SUCCESS&#39; && $result->result_code == &#39;SUCCESS&#39;){    
$prepayId = $result->prepay_id;
}

7. Générer la configuration JS du paiement

$json = $payment->configForPayment($prepayId); // 返回 json 字符串,如果想返回数组,传第二个参数 false

8. Le numéro de commande et le json seront écrits dans le modèle pour la confirmation du paiement par l'utilisateur, déclencheront le js et appelleront le paiement

return view(&#39;done&#39;,[&#39;order&#39;=>$ordersn,&#39;json&#39;=>$json]);
<script>$(&#39;form&#39;).submit (function() {
WeixinJSBridge.invoke(&#39;getBrandWCPayRequest&#39;, {!!$json!!},function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ) {// 使用以上方式判断前端返回,微信团队郑重提示:
// res.err_msg将在用户支付成功后返回
// ok,但并不保证它绝对可靠。          }
      }
);return false;
});</script>

9. Rappel réussi

Une fois que l'utilisateur a payé avec succès, le serveur WeChat lancera une requête POST vers l'URL de rappel définie dans la commande, et le contenu de la requête est un XML.

Configurez d'abord la méthode payante dans le middleware VerifyCsrfToken sans vérification CSRF

   public function paid(){$response =$this->$app->payment->handleNotify(function($notify, $successful){    // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
    $order = 查询订单($notify->out_trade_no); 
    if (!$order) { // 如果订单不存在
        return &#39;Order not exist.&#39;; // 告诉微信,我已经处理完了,订单没找到,别再通知我了    }    // 如果订单存在
    // 检查订单是否已经更新过支付状态
    if ($order->paid_at) { // 假设订单字段“支付时间”不为空代表已经支付
        return true; // 已经支付成功了就不再更新了    }    // 用户是否支付成功
    if ($successful) {        // 不是已经支付状态则修改为已经支付状态
        $order->paid_at = time(); // 更新支付时间为当前时间
        $order->status = &#39;paid&#39;;
    } else { // 用户支付失败
        $order->status = &#39;paid_fail&#39;;
    }    $order->save(); // 保存订单
    return true; // 返回处理完成});
    return $response;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn