Heim >WeChat-Applet >Mini-Programmentwicklung >Detaillierte Erläuterung der Schritte für die PHP-Entwicklung der Integration kleiner Zahlungsserver in Programme

Detaillierte Erläuterung der Schritte für die PHP-Entwicklung der Integration kleiner Zahlungsserver in Programme

Y2J
Y2JOriginal
2017-05-12 11:44:063979Durchsuche

In diesem Artikel werden hauptsächlich die Integrationsbeispiele des WeChat Mini-Programms WeChat Payment Server und zugehörige Informationen zum Herunterladen des Quellcodes vorgestellt

WeChat Mini-Programm WeChat Payment Server-Sammlung

Theoretisch kann die gesamte Arbeit zur Integration der WeChat-Zahlung auf der Seite des Miniprogramms erledigt werden, da das Miniprogramm js die Möglichkeit hat, auf das Netzwerk zuzugreifen, sensible Schlüssel jedoch aus Sicherheitsgründen nicht offengelegt und das offizielle vorgefertigte PHP kann verwendet werden. Die Demo ist arbeitssparender, sodass die Signatur und Anforderung auf der Serverseite abgeschlossen werden und das Applet nur eine Verbindung zur wx.requestPayment(OBJECT)-Schnittstelle herstellt.

Der gesamte Integrationsprozess ähnelt JSAPI und APP. Geben Sie zunächst eine Bestellung auf einheitliche Weise auf und fordern Sie dann die Zahlung anhand der zurückgegebenen Ergebnisse an.

Insgesamt drei Schritte:

1. Das Applet tauscht den von wx.login zurückgegebenen Code gegen openid aus. 2. Der Server gibt eine Bestellung an WeChat auf. 3. Das Applet leitet die Zahlung ein.

Bereiten Sie diese Dinge im Voraus vor:


APPID = 'wx426b3015555a46be';
MCHID = '1900009851';
KEY = '8934e7d15453e97507ef794cf7b0519d';
APPSECRET = '7813490da6f1265e4901ffb80afaa36f';

PHP SDK, der Download-Link befindet sich am Ende des Artikels

Der 1. und 4 Artikel sind Anträge. Der zweite und der dritte Artikel werden bei der Beantragung einer WeChat-Zahlung erhalten. Beachten Sie, dass der dritte und der vierte Artikel ähnlich aussehen, es sich jedoch tatsächlich um zwei Dinge handelt. Eine Verwechslung der beiden führt zu einer fehlgeschlagenen Signatur.

Eine Bestellung auf WeChat aufgeben und die prepay_id erhalten

1. Erstellen Sie einen Controller und importieren Sie die Klasse WxPay.Api.php


<?php
require_once DIR . &#39;/BaseController.php&#39;;
require_once DIR . &#39;/../third_party/wxpay/WxPay.Api.php&#39;;

class WXPay extends BaseController {
  function index() {
  }
}
Sie können dann Zugriffsanfragen über index.php/wxpay stellen

2. Ändern Sie die

KonfigurationsdateiWxPay.Config.php

um den entsprechenden Schlüssel zu beantragen sich selbst

3. Implementieren Sie die Indexmethode


function index() {
//     初始化值对象
    $input = new WxPayUnifiedOrder();
//     文档提及的参数规范:商家名称-销售商品类目
    $input->SetBody("灵动商城-手机");
//     订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
    $input->SetOut_trade_no(&#39;123123123&#39;);
//     费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
    $input->SetTotal_fee("1");
    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
    $input->SetTrade_type("JSAPI");
//     由小程序端传给服务端
    $input->SetOpenid($this->input->post(&#39;openId&#39;));
//     向微信统一下单,并返回order,它是一个array数组
    $order = WxPayApi::unifiedOrder($input);
//     json化返回给小程序端
    header("Content-Type: application/json");
    echo json_encode($order);
  }

Hinweis 1: Der im Dokument erwähnte nonce_str wird nicht übermittelt , aber das für uns ausgefüllte SDK

stammt aus Zeile 55 von WxPay.Api.php


$inputObj->SetNonce_str(self::getNonceStr());//随机字符串

Hinweis 2: sign auch Ich habe freundlicherweise setSign gegeben, die Quelle ist in Zeile 111 von WxPay.Data.php, MakeSign()


 /**
   * 生成签名
   * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
   */
  public function MakeSign()
  {
    //签名步骤一:按字典序排序参数
    ksort($this->values);
    $string = $this->ToUrlParams();
    //签名步骤二:在string后加入KEY
    $string = $string . "&key=".WxPayConfig::KEY;
    //签名步骤三:MD5加密
    $string = md5($string);
    //签名步骤四:所有字符转为大写
    $result = strtoupper($string);
    return $result;
  }
4. Rufen Sie

auf Um sich innerhalb der Applet-Schnittstelle anzumelden, holen Sie sich die OpenID

und stellen Sie eine Anmeldeanfrage an WeChat, holen Sie sich den Code und übermitteln Sie den Code dann im Austausch gegen die OpenId


wx.login({
     success: function(res) {
      if (res.code) {
       //发起网络请求
       wx.request({
        url: &#39;https://api.weixin.qq.com/sns/jscode2session?appid=wx9114b997bd86f***&secret=d27551c7803cf16015e536b192******&js_code=&#39;+res.code+&#39;&grant_type=authorization_code&#39;,
        data: {
         code: res.code
        },
        success: function (response) {
          console.log(response);
        }
       })
      } else {
       console.log(&#39;获取用户登录态失败!&#39; + res.errMsg)
      }
     }
    });
Ansicht aus der Konsole Nachdem Sie die OpenID nun erfolgreich erhalten haben, müssen Sie sie nur noch an den Server übergeben, wo $this->input->post('openId' ) wartet auf den Empfang.

5. Das Miniprogramm initiiert eine Anfrage an lendoo.leanapp.cn/index.php/WXPay für eine einheitliche Auftragserteilung


    //统一下单接口对接
          wx.request({
            url: &#39;https://lendoo.leanapp.cn/index.php/WXPay&#39;,
            data: {
              openId: openId
            },
            success: function (response) {
              console.log(response);

            },
                header: {
            &#39;content-type&#39;: &#39;application/x-www-form-urlencoded&#39;
        },
          });
Die folgenden Ergebnisse werden erhalten


{
 "appid": "wx9114b997bd86f8ed",
 "mch_id": "1414142302",
 "nonce_str": "eEICgYFuGqxFRK6f",
 "prepay_id": "wx201701022235141fc713b8f80137935406",
 "result_code": "SUCCESS",
 "return_code": "SUCCESS",
 "return_msg": "OK",
 "sign": "63E60C8CD90394FB50E612D085F5362C",
 "trade_type": "JSAPI"
}
Die Voraussetzung ist, dass https://lendoo.leanapp.cn bereits in der Whitelist ist:

6. Rufen Sie die Zahlungs-API im Miniprogramm auf


// 发起支付
var appId = response.data.appid;
var timeStamp = (Date.parse(new Date()) / 1000).toString();
var pkg = &#39;prepay_id=&#39; + response.data.prepay_id;
var nonceStr = response.data.nonce_str;
var paySign = md5.hex_md5(&#39;appId=&#39;+appId+&#39;&nonceStr=&#39;+nonceStr+&#39;&package=&#39;+pkg+&#39;&signType=MD5&timeStamp=&#39;+timeStamp+"&key=d27551c7803cf16***e536b192d5d03b").toUpperCase();
console.log(paySign);
console.log(appId);
wx.requestPayment({
  &#39;timeStamp&#39;: timeStamp,
  &#39;nonceStr&#39;: nonceStr,
  &#39;package&#39;: pkg,
  &#39;signType&#39;: &#39;MD5&#39;,
  &#39;paySign&#39;: paySign,
  &#39;success&#39;:function(res){
    console.log(&#39;success&#39;);
    console.log(res);
  }
});
Simulatortest, ein QR-Code wird angezeigt erscheint zum Scannen

Das Ergebnis war ein Fehler:


errMsg:"requestPayment:fail"
err_code:2
err_desc:"支付验证签名失败"

Schlüssel Muss zur Signatur hinzugefügt werden! ! ! 'appId='+appId+'&nonceStr='+nonceStr+'&package='+pkg+'&signType=MD5&timeStamp='+timeStamp+"&key=d27551c7803cf16*e536b192d5d03b"Dies ist abgeschlossen.

Aber der Schlüssel wird im Dokument nicht erwähnt

Screenshot der erfolgreichen Zahlung

Nachdem wir uns über das Dokument beschwert haben, sprechen wir über die Namensregeln: GetSpbill_create_ip() und IsSpbill_create_ipSet() werden durch Unterstriche und Kamele getrennt.

Der erste Buchstabe wird ebenfalls großgeschrieben , unifiedOrder( ) Diese Art des ernsthaften Schreibens vergisst nicht, ein paar Gesten zu machen. Es scheint wahr zu sein, dass das Internet sagt, dass die SDKs großer Unternehmen von Praktikanten geschrieben werden, aber wo ist der Code-Reviewer? [Verwandte Empfehlungen]


1

Laden Sie den vollständigen Quellcode des WeChat-Miniprogramms herunter

2 Demo: Imitation Mall

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte für die PHP-Entwicklung der Integration kleiner Zahlungsserver in Programme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn