ホームページ  >  記事  >  バックエンド開発  >  PHP は WeChat アプレット支払いコード共有を実装します

PHP は WeChat アプレット支払いコード共有を実装します

小云云
小云云オリジナル
2018-03-02 09:53:148675ブラウズ

php の機能は非常に強力です。この記事では、主に WeChat アプレット支払いコードの php バックエンド実装について説明します。フロントエンドは、対応する支払いイベントでネットワーク リクエストを行うだけです。

WeChat アプレットによる支払い終了 PHP (2)

  view_moneysure:function(){

    var code = this.data.code;
    console.log('code是' +code)
    wx.request({
      url: 'https://...com/pay.php',//这个链接是后端写的
      header: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      data: {
        code: code,
      },
      method: 'POST', 
      success: function (response) {
        console.log( response.data);
        // 发起支付
        wx.requestPayment({
          'appId': response.data.appId,
          'timeStamp': response.data.timeStamp,
          'nonceStr': response.data.nonceStr,
          'package': response.data.package,
          'signType': 'MD5',
          'paySign': response.data.paySign,
          'success': function (res) {
            wx.showToast({
                title: '支付成功'
            });
            console.log(res);
          },
          'fail': function (res) {
            console.log(res)
          }
        });
      },
      fail: function (res) {
        console.log(res)
      }
    })
  },

バックエンド コード:

1. pay.php //ミニ プログラムによって要求されたバックエンド アドレス

e16c3c8897157dbebcecebd11889006eSetBody("testceshi");
        //         订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
        $input->SetOut_trade_no(time().'');
        //         费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
        $input->SetTotal_fee("1");
        $input->SetNotify_url("https://...com/notify.php");//需要自己写的notify.php
        $input->SetTrade_type("JSAPI");
        //         由小程序端传给后端或者后端自己获取,写自己获取到的,
        $input->SetOpenid('UdhncondJcnkJnjknkcssdcAbckn');
        //$input->SetOpenid($this->getSession()->openid);
        //         向微信统一下单,并返回order,它是一个array数组
        $order = WxPayApi::unifiedOrder($input);
        //         json化返回给小程序端
        header("Content-Type: application/json");
        echo $this->getJsApiParameters($order);
    }

    private function getJsApiParameters($UnifiedOrderResult)
    {    //判断是否统一下单返回了prepay_id
        if(!array_key_exists("appid", $UnifiedOrderResult)
            || !array_key_exists("prepay_id", $UnifiedOrderResult)
            || $UnifiedOrderResult['prepay_id'] == "")
        {
            throw new WxPayException("参数错误");
        }
        $jsapi = new WxPayJsApiPay();
        $jsapi->SetAppid($UnifiedOrderResult["appid"]);
        $timeStamp = time();
        $jsapi->SetTimeStamp("$timeStamp");
        $jsapi->SetNonceStr(WxPayApi::getNonceStr());
        $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
        $jsapi->SetSignType("MD5");
        $jsapi->SetPaySign($jsapi->MakeSign());
        $parameters = json_encode($jsapi->GetValues());
        return $parameters;
    }
//这里是服务器端获取openid的函数
//    private function getSession() {
//        $code = $this->input->post('code');
//        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.WxPayConfig::APPID.'&secret='.WxPayConfig::APPSECRET.'&js_code='.$code.'&grant_type=authorization_code';
//        $response = json_decode(file_get_contents($url));
//        return $response;
//    }
}
$WxPay = new WXPay();
$WxPay->index();

2.WeChat SDK ダウンロード リンク: https:// pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip

解凍すると、lib フォルダーに表示されます:


サーバーにアクセスできるディレクトリに置きます。

WxPayConfig.php でアカウント情報を構成します:

class WxPayConfig
{
	//=======【基本信息设置】=====================================
	//
	/**
	 * TODO: 修改这里配置为您自己申请的商户信息
	 * 微信公众号信息配置
	 * 
	 * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
	 * 
	 * MCHID:商户号(必须配置,开户邮件中可查看)
	 * 
	 * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
	 * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
	 * 
	 * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
	 * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
	 * @var string
	 */
	const APPID = 'wx123456789...';//这里填上自己的对应信息
	const MCHID = '14151666888';
	const KEY = '11223344556677889900';
	const APPSECRET = '828bfsdibfsiubfikdbfik';
	const NOTIFY_URL='https://...com/notify.php';

注:

プロセス中に署名エラーが発生しましたが、これは常に問題でした。WeChat 支払いインターフェイスの署名検証ツールを使用して、何も問題がないことを確認しました。インターネットで指摘されているように、これはタイプミスでした。書き込まれたパラメータをすべてチェックしましたが、何度もエラーが返されます。主な問題は署名エラーです。XML 形式が間違っている、MD5 の後の桁数などをよく確認してください。暗号化、辞書の並べ替えが適切に配置されていない、パラメーターが欠落しているなど...

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1


3. 最後に、notify.php を添付します

<return_code><![CDATA[FAIL]]></return_code>

修正を交換するためにメッセージを残してください。

関連する推奨事項:

PHP は、Alipay 支払いコードを呼び出すアプリを実装します

PHP UnionPay オンライン支払いインターフェイスの開発例

WeChat スキャン コード支払いを実装する php コード共有

以上がPHP は WeChat アプレット支払いコード共有を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。